在教学中,大多实例都是主键由一列构成,所以也可以简单地说主属性与主键没有什么区别。
第三范式的定义:如果关系模式R中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式的。记作R 3NF。
如:学生关系模式S1(学号,姓名,系号,系名,系地址)
(学号)为关键字,因是单属性关键字,不存在部份依赖问题,应属于第二范式。但因为:学号—>系号,系号—\>学号,系号—>系地址,因此:学号—>系地址 是通过传递依赖实现的。即候选关键字“学号”不直接函数决定于非主属性“系地址”。所以此关系不属于第三范式。应将其分解为:
SC(学号,姓名,系号)
D(系号,系名,系地址)
C(课程号,课程名,学分)
S(学号,课程号,成绩)
设计原则:“一事一地”,即一个关系反映一个实体或一个联系,不应把几样东西混合放在一起。基本关系模式切忌“大而全”,在若干个基本关系模式组成的关系模型上,根据需要可以通过自然联接导出所需要的关系。
BCNF的定义:如果一个关系R中的所有属性都不传递依赖于R的任何候选关键字,或者说关系R中的每个决定因数都是候选关键字时,则称关系R属于BCNF范式,记作R BCNF。
一个满足BCNF的关系模式有
1.所有非主属性对每一个码都是完全函数依赖。
2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
由于RBCNF,按定义排除了任何属性对码的传递依赖与部分依赖,所以R3NF。但是若R3NF,则R未必属于BCNF。
下面用几个例子说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。
详细信息...
例l 关系模式SJP(S,J,P)中,S是学生,J表示课程,P表示名次。每一个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生(即没有并列名次)。由语义可得到下面的函数依赖:
(S,J)→P ,(J,P)→S
所以(S,J)与(J,P)都可以作为候选码。这两个码各由两个属性组成,而且它们是相交的。这个关系模式中显然没有属性对码传递依赖或部分依赖。所以SJP3NF,而且除(S,J)与(J,P)以外没有其它决定因素,所以SJPBCNF。
例2 关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下的函数依赖。
(S,J)→T;(S,T)→J;T→J。
这里(S,J),(S,T)都是候选码。
STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素,而T不包含码。
3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。非BCNF的关系模式也可以通过分解成为BCNF。例如STJ可分解为ST(S,T)与TJ(T,J),它们都是BCNF。
一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。
关系模式规范化小结
目的:规范化的目的是使结构合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新。
原则:遵从概念单一化“一事一地”的原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念单一化。
方法:将关系模式投影分解成两个或两个以上的关系模式。
要求:分解后的关系模式集合应当与原关系模式“等价”,即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。