MySQL25 - 三范式
数据库三范式
数据库中表的设计依据
第一范式
要求任何一张表必须有主键,每一个字段原子性不可再分
- 必须有唯一非空列作为主键
- 比如邮箱和手机号不能存储在一列中,应该分为两列,确保每一列的原子性
第二范式
建立在第一范式基础上,要求所有非主键字段完全依赖主键,不要产生部分依赖
- 一般出现在联合主键中,非主键字段只依赖于联合主键中的某一个字段,而不是联合主键的全部字段
- 解决方法:将联合主键(两个字段)拆分为三张表,两个主键字段是多对多的关系
- 表1 -- 主键1, 表2 -- 主键2,表3 -- 表1与表2的关系
第三范式
建立在第二范式基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖
- 例如:一张学生表的字段为 学号 -- 姓名 -- 班级号 -- 班级名
- 该表中,班级名依赖于班级号,再由班级号依赖于学号,产生了传递依赖
- 解决方法:创建班级表以班级号为主键,班级名直接依赖于班级号,学生表中班级号设为外键,删除班级名字段
总结
- 一对多
- 两张表,多的表加外键
- 多对多
- 三张表,关系表加两个外键
- 一对一
- 可能存在一张表字段太多,太庞大,需要拆成两张表
- 在第二张表中,添加第一张表的主键,设为外键且唯一 FOREIGN KEY UNIQUE
- 以实际需求为准
- 表连接越多效率越低,有时会以空间换时间,提高效率
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析