MySQL25 - 三范式
数据库三范式
数据库中表的设计依据
第一范式
要求任何一张表必须有主键,每一个字段原子性不可再分
- 必须有唯一非空列作为主键
- 比如邮箱和手机号不能存储在一列中,应该分为两列,确保每一列的原子性
第二范式
建立在第一范式基础上,要求所有非主键字段完全依赖主键,不要产生部分依赖
- 一般出现在联合主键中,非主键字段只依赖于联合主键中的某一个字段,而不是联合主键的全部字段
- 解决方法:将联合主键(两个字段)拆分为三张表,两个主键字段是多对多的关系
- 表1 -- 主键1, 表2 -- 主键2,表3 -- 表1与表2的关系
第三范式
建立在第二范式基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖
- 例如:一张学生表的字段为 学号 -- 姓名 -- 班级号 -- 班级名
- 该表中,班级名依赖于班级号,再由班级号依赖于学号,产生了传递依赖
- 解决方法:创建班级表以班级号为主键,班级名直接依赖于班级号,学生表中班级号设为外键,删除班级名字段
总结
- 一对多
- 两张表,多的表加外键
- 多对多
- 三张表,关系表加两个外键
- 一对一
- 可能存在一张表字段太多,太庞大,需要拆成两张表
- 在第二张表中,添加第一张表的主键,设为外键且唯一 FOREIGN KEY UNIQUE
- 以实际需求为准
- 表连接越多效率越低,有时会以空间换时间,提高效率