MySQL25 - 三范式

数据库三范式

数据库中表的设计依据

第一范式

要求任何一张表必须有主键每一个字段原子性不可再分

  • 必须有唯一非空列作为主键
  • 比如邮箱和手机号不能存储在一列中,应该分为两列,确保每一列的原子性

第二范式

建立在第一范式基础上,要求所有非主键字段完全依赖主键,不要产生部分依赖

  • 一般出现在联合主键中,非主键字段只依赖于联合主键中的某一个字段,而不是联合主键的全部字段
  • 解决方法:将联合主键(两个字段)拆分为三张表,两个主键字段是多对多的关系
    • 表1 -- 主键1, 表2 -- 主键2,表3 -- 表1与表2的关系

第三范式

建立在第二范式基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖

  • 例如:一张学生表的字段为 学号 -- 姓名 -- 班级号 -- 班级名
  • 该表中,班级名依赖于班级号,再由班级号依赖于学号,产生了传递依赖
  • 解决方法:创建班级表以班级号为主键,班级名直接依赖于班级号,学生表中班级号设为外键,删除班级名字段

总结

  • 一对多
    • 两张表,多的表加外键
  • 多对多
    • 三张表,关系表加两个外键
  • 一对一
    • 可能存在一张表字段太多,太庞大,需要拆成两张表
    • 在第二张表中,添加第一张表的主键,设为外键且唯一 FOREIGN KEY UNIQUE
  • 以实际需求为准
    • 表连接越多效率越低,有时会以空间换时间,提高效率
posted @   LaViez  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示