模式分解就是将一个大的关系模式
键
键也称为码,是用来标识其他元组的属性集。通常有以下几种类型。
- 超键(超码),在关系模式中能唯一标识元组的属性集。
- 候选键(候选码),在关系模式中,能唯一标识元组并且不包含多余属性的属性集。
- 主键(主码),在关系模式中的若干个候选键中随意指定的一个候选码作为关键字,这个关键字即为主键。
- 外键,如果一个关系模式
中的属性 是其他关系模式的主键,那么 在模式 中就被称为外键。
从以上定义可以看出来,主键、候选键和超键之间存在着包含关系:
闭包
这里的闭包不是各个编程语言中的闭包,它所指代的意义是关系模式中所有属性集关系的推导结果。以下是闭包的定义。
闭包的意义在于如果
Armstrong公理
一个依赖集的闭包的推算可以通过Armstrong公理来计算。Armstrong公理是一系列的函数依赖推导规则,由三种原始公理和三个补充定律组成。
- 自反律:若
,则 。 - 增补律:若
,则 。 - 传递律,若
且 ,则 。 - 合并律:若
于 成立,则 成立。 - 分解率:若
成立,则 于 成立。 - 伪传递率:若
与 成立,则 成立。
现在可以用以上六个定律尝试推导一下前面的示例。
无损连接和函数依赖保持的判定
关系模式的分解必须遵循以下两个准则:
- 无损连接:信息不能发生增减,保证不失真。
- 保持函数依赖:不破坏属性间存在的依赖关系。
无损连接
无损连接其实比较好理解,关系模式在分解成比较小的关系模式以后,通过投影、连接以后仍能恢复原来的关系模式,也就是没有丢失信息,则这个分解被称为无损分解,否则就是损失分解。
对于无损分解的检验,一般可以使用以下技巧来进行:如果关系模式
如果分解出的关系模式超过两个,例如
,那么就不能采用上述的方法进行快速检验了,只能采用表格列举法来逐个依赖进行推导。
函数依赖保持
简而言之,函数依赖保持实际上就是
对于函数依赖保持的快速判定可以采用以下技巧来进行:如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的。
范式
范式是符合某种基本的关系模式的集合。在日常工作中比较经常听到的是第一范式、第二范式、第三范式和BC范式。这四种范式是递进严格的,并且
更加严格的范式还有第四范式(4NF)和第五范式(5NF),但是它们的规定过于严格,虽然有利于使数据结构达到最简,但是并不一定对日常的查询提供优化,所以在日常设计中很少使用。
第一范式(1NF)
如果关系模式
第二范式(2NF)
如果关系模式
第三范式(3NF)
如果关系模式
BC范式(BCNF)
如果关系模式
软考例题
这里可以根据依赖关系,直接推导出
A. 具有无损连接性、保持函数依赖
B. 不具有无损连接性、保持函数依赖
C. 具有无损连接性、不保持函数依赖
D. 不具有无损连接性、不保持函数依赖
首先来确定无损连接性。计算
然后再确定函数依赖保持。
故这道题选A。