精练讲解范式:
1NF:所有满足关系八大条件的表都满足第一范式(没有重复的列,保存的数据都是原子数据不可分)
2NF:当且仅当在1NF条件下被主码完全决定,如果关系R(A,B,N,O,P)有复合键(A,B),
必须要有(A,B)->(N,O,P) 而不能有A或者B单独决定N,O,P其中的一个,这就是完全依赖。
上个例子:
STUDENT_ACTIVITY(StudentID,Activity,ActivityFee)
这个关系就不满足第二范式 因为(StudentID,Activity)->ActivityFee 而Activity->ActivityFee
Activity这个键被部分依赖,所以需要把(Avtivity->ActivityFee挪到另外一张表中)
3NF:当且仅当满足2NF的条件下,没有非码属性健的函数依赖即可认为满足3NF
上个例子:
STUDENT_HOUSING(StudentID,Building,HousingFee)
由于有StudentID->Building,Building->HousingFee这不满足第三范式的条件
所以为了规范至3NF,编程两张表如下:
STUDENT_HOUSING1(StudentID,Building)
BUILDING_FEE(Building,HousingFee)
这就满足了3NF的所有要求了
BCNF:当且仅当在3NF的条件下,每个决定因素都是候选码的时候即为BCNF,(消除的是传递依赖)
例子:
若一张表的数据包括:“书号、书名、作者”其中,书号是唯一的,书名允许相同,一个书号对应一本书。一本书的作者可以多个,但是同一个作者所参与编著的书名应该是不同
存在关系:
书号→书名
(书名、作者)→书号
其中,每一个属性都为主属性,但是上述关系存在传递依赖,不能是BCNF。即:
(书名、作者)→书号→书名
(书名、作者)→书名
我们可以通过分解为两张表,实现BCNF。

浙公网安备 33010602011771号