数据库关系模式规范化


在教学中,大多实例都是主键由一列构成,所以也可以简单地说主属性与主键没有什么区别。

第三范式的定义:如果关系模式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,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。 

关系模式规范化小结

目的:规范化的目的是使结构合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新。

原则:遵从概念单一化“一事一地”的原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念单一化。

方法:将关系模式投影分解成两个或两个以上的关系模式。

要求:分解后的关系模式集合应当与原关系模式“等价”,即经过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。

你可能感兴趣的:(Mine)