精练讲解范式:

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。

posted @ 2020-11-03 16:04  想要赚到老秃顶少不了  阅读(115)  评论(0)    收藏  举报