数据库设计三范式
什么是三范式
设计关系数据库时,遵从不同的规范要求。这些规范要求被称为范式。各种范式呈递次规范,越高的范式数据冗余越小。
范式的划分
数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。
根据数据库冗余的大小,目前关系型数据库有六种范式。范式越高,冗余度越小。
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- 巴斯-科德范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF, 完美范式)
一般遵循前三种范式。
一范式
强调字段的原子性,即一个字段不能够分成其他几个字段。
二范式
满足一范式的基础上,包含两部分内容:
- 表必须有一个主键
- 非主键字段必须完全依赖于主键,而不能只依赖主键的一部分。
以上的数据表有OrderID和ProductID共同组成的主键,但UniPrice、ProductName只依赖于ProductID,所以不符合二范式的要求。
做如下修改,让其符合二范式要求。
三范式
满足2NF,另外非主键字段必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键字段A依赖于非主键字段B,非主键字段B依赖于主键的情况。
上表非主键字段都完全依赖于主键,符合2NF。不过问题是CustomerName, CustomerAddr, CustomerCity直接依赖的是CustomerID(非主键列),而不直接依赖于主键。它是通过传递依赖。
可通过如下修改,符合三范式。