微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql 10: 数据库设计三范式

DBA命令

导出数据

  • 导出某库
    • 在shell窗口:MysqLdump database_name > /home/wangxun/MysqLBackUp/database_name.sql -uroot -pXXX;
  • 导出某表
    • 在shell窗口:MysqLdump database_name tb_name > /home/wangxun/MysqLBackUp/tb_name.sql -uroot -pXXX;

导入数据

  • create database database_name;
  • use database_name;
  • source 导出的sql文件;

数据库设计三范式

什么是设计范式?

  • 设计表的依据,根据这个三范式规则设计的表,不会出现数据冗余

第一范式

  • 任何一张表都要有主键,每个字段具有原子性,不可再分

第二范式

  • 在以上范式基础上
  • 所有非主键字段完全依赖主键,不要产生部分依赖
  • 多对多怎么设计?
    • 三张表,关系表里两外键
    t_student    学生表
    sno(pk)     sname
    ___________________
    1		zs
    2		ls
    3		wu
    
    t_teacher   讲师表
    tno(pk)       tname
    _____________________
    1		t_wang
    2		t_zhang
    3		t_li
    
    t_student_teacher_relation     学生讲师关系表
    id(pk)        sno(fk)           tno(fk)
    _______________________________________
    1		1		1
    2		1		2
    3		2		2
    4		2		3
    
    

第三范式

  • 以上范式基础上
  • 所有非主键字段必须直接依赖主键,不能产生传递依赖
  • 一对多怎么设计?
    • 两张表,多的表加外键

注意

  • 实际开发,以满足客户的需求为主,有时候会拿冗余换执行速度

一对一怎么设计?

方案一:主键共享

t_user_login  用户登陆表

id(pk)     username        password
___________________________________
1           zs			123
2	    ls			456


t_user_detail     用户详细信息表

id(pk + fk)     realname        tel       ....     
__________________________________________
1		 wangxun        xxx
2		 han            yyy

方案二:外键唯一(多对多的变形)

t_user_login  用户登陆表

id(pk)     username        password
___________________________________
1           zs			123
2	    ls			456


t_user_detail     用户详细信息表

id(pk)     realname        tel       userid(fk + unique)   ....     
______________________________________________________
1	   wangxun        xxx         1
2	   han            yyy	      2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐