第一范式(1NF):在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是属于第一范式的关系。

第二范式(2NF):如果关系模式RUF)中的所有非主属性都完全依赖于任意一个候选关键字,则称 R是属于第二范式的。

第三范式(3NF):如果关系模式RUF)中的所有非主属性对任何候选关键字都不存在传递信赖,则称 R是属于第三范式的。



第一范式是关系数据库的最小要求

比如

 

姓名                    性别                    身高

Billy                    Male              180CM

这就是第一范式.

如果改成

                                                                                             

姓名                    性别                    胸围          臀围          腰围

这个就不是第一范式了.

 

第二范式说通俗一点就是不存在部分依赖,举例如下:

促销员的销量表,字段为促销员OID,产品OID,产品颜色,产品重量

业务上主键应该为 促销员OID和产品OID

但是产品颜色和产品重量显然依赖于产品OID,不能因为某个促销员长得漂亮产品颜色就艳丽一些.

所以产品颜色和产品重量就部分依赖于候选主键促销员OID和产品OID,这样就满足第二范式.

 

 

第三范式说通俗一点就是不存在传递依赖.举例如下:

促销员表,字段为促销员OID,所属销售部OID,销售部地址.

那么促销员OID是业务主键,由于只有一个字段做主键,所以肯定不存在部分依赖

但是这个存在传递依赖

促销员OID决定了所属销售部OID,而所属销售部又能决定销售部地址.

所以销售部地址间接依赖于销售部OID

于是存在传递依赖.

 

 

由于我们采用OID一个字段做表的主键,所以肯定满足第二范式.至于满不满足第三范式就要分析一下了.

但是有些情况下是需要保存历史信息的

比如销售部的地址变动了

这些另当别论,打破第三范式就好了

另外联合查询的性能损失很大,有时候破坏范式来换取报表的运行效率也是值得的.