mysql 10: 数据库设计三范式

数据库设计三范式

什么是设计范式?

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

第一范式

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

第二范式

  • 在以上范式基础上
  • 所有非主键字段完全依赖主键,不要产生部分依赖

第三范式

  • 以上范式基础上
  • 所有非主键字段必须直接依赖主键,不能产生传递依赖

注意

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

多对多怎么设计?

方案:三张表,关系表里两外键

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_class   班级表
cno(pk)          cname
____________________________________
1		class_1
2		class_2

t_student     学生表
sno(pk)    sname      cno(fk)
_____________________________________
1	    zs		1
2	    ls		1
3	    wu		2
4	    zl		2

一对一怎么设计?

方案一:主键共享

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
posted @ 2022-07-29 15:42  rocket-raccoon  阅读(35)  评论(0编辑  收藏  举报