第一范式标准:
1)无重复的数据
2)每一列中的数据是都是原子数据
如下图的表中就不满足这两个条件,Customer数据重复了,ItemsOrderd 中不是原子数据(一列中有多组数据)。
优化方法:
1)新建Customer表和order表做主外键关联。
2)分拆ItemOrdered列,将有多组数据的行分成多行,并新建主键列,因为分拆多行后原OrderNo列已不能唯一标识一行数据了。
第二范式标准:
1. 符合第一范式
2.每列必须依赖于整个键
如下表中 CustomerNo、PartNo 只依赖与 OrderNo 而不依赖于LineIitem. 像这种情况就需要将下面的订单表拆成订单主表(表头)与订单明细表。
通常明细表以表头名开头来名字,如这里的主表命名为Order,明细表命名为OrderDetails。
第三范式标准:
1.符合第二范式。
2.任何列都不能依赖与非键列。
3.不可以有派生数据。
以上图中的表为例,其中Description Wt 列就依赖于PartNo列。为解决此问题,应再拆表,新一个Product表(包含PartNo、Wt、Description、UnitPrice)。
注意这里出于业务考虑原表中的UnitPrice列应保留。
上图中Total Price为派生数据,因为此数据是可以通过Unit Price 与 Qty 计算而得到。(需要注意的是:有时候为了性能考虑应违反此规则,
特别是有时候需要以此列建立索引时。)