关系型数据库设计三范式
数据库设计三范式意思就是数据库的设计规范,不满足该该规范要求的就不属于关系型数据库
第一范式(1NF)
关键字:原子性
每列字段具有原子性,每列的字段都不可分割,同一个列不能有多个值
第一范式是关系型数据库的基本要求,不满足第一范式的数据库不是关系型数据库
如果表不满足第一范式怎么解决?比如联系方式字段既有电话又有邮箱
解决的办法很简单,就是将该字段进行分割,分成两个字段使其具有原子性
值得注意的是:第一范式要根据实际需求来定
第二范式(2NF)
关键字:唯一性和依赖性
每个表都有主键,其他字段完全依赖主键
第二范式在第一范式的基础上,要求表中的每一条数据可以被唯一区分
依赖的意思是每个字段都和主键有关,缺德主键的值就可以确定其他字段
完全依赖意思是联合主键时,其他字段依赖联合主键中的每一个字段
不满足第二范式该怎么解决?比如下边这个表:
此表中根据主键学生编号,不能确定唯一字段课程编号和成绩,不满足第二范式
所以应该进行分表解决,将课程编号单独建立一个表
第三范式(1NF)
关键字:不存在传递依赖
非主键字段必须直接依赖主键
不满足第三范式该怎么解决?比如:
班级名字段需要根据学生姓名才能确定,学生姓名根据编号确定,班级名和编号之间存在传递依赖,不是直接依赖
所以解决办法应该将学生姓名拿出来单独建立一个表
设计三范式的优缺点
优点
- 重复数据少或者没有
- 表更小,可以更好地放在内存中,执行更快
- 更新操作快
- 可以减少使用group by 和 distinct
缺点
复杂一点的查询需要关联,可能会导致索引失效