数据库设计三范式
什么是设计范式?
- 设计表的依据,根据这个三范式规则设计的表,不会出现数据冗余
第一范式
- 任何一张表都要有主键,每个字段具有原子性,不可再分
第二范式
- 在以上范式基础上
- 所有非主键字段完全依赖主键,不要产生部分依赖
第三范式
- 以上范式基础上
- 所有非主键字段必须直接依赖主键,不能产生传递依赖
注意
- 实际开发,以满足客户的需求为主,有时候会拿冗余换执行速度
多对多怎么设计?
方案:三张表,关系表里两外键
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术