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 @   nefu-xun  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示