候选码的求解
闭包:
- 闭包就是由一个属性直接或间接推导出的所有属性的集合。
候选码的求解理论和算法:
对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:
- L类 :仅出现在函数依赖左部的属性。
- R 类 :仅出现在函数依赖右部的属性。
- N 类 :在函数依赖左右两边均未出现的属性。
- LR类 :在函数依赖左右两边均出现的属性。
定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性或N类属性,则X必为R的任一候选码的成员。
推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性;则X必为R的唯一候选码。
定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选码中。
推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类和N类组成的属性集,且X+包含了R的全部属性;则X是R的唯一候选码。
范式的判断
非主属性:
- 不包含在任何一个候选码中的属性称为非主属性。非主属性是相对于主属性来定义的。
主属性:
- 在一个关系中,如果一个属性是构成某一个候选关键字(候选码)的属性集中的一个属性,则称它为主属性(Primeattribute)
码:
- 可以确定一个元组的所有信息的属性名或属性名组。
1NF:基本表,不能表中有表
2NF:消除了非主属性对码的部分函数依赖
3NF:消除了非主属性对码的传递函数依赖
BCNF:消除了主属性对码的部分函数依赖和传递函数依赖
例题1:T={C->D, A->BC, AE->F},为第几范式?
主码是AE。A决定BC,B部分依赖于A,故为一范式。
例题2:F={E->D,C- >B,CE->F,B->A},为第几范式?分解为3NF。
主码是CE。D部分函数依赖于CE,A、B部分函数依赖于CE,为第一范式。
分解如下:(E,D)(C,B)(B,A)(C,E,F)
例题3:F={AB->CE,E- >AB,C->D},为第几范式?
主码为AB或E。
若主码为AB,AB->C,C->D。为第二范式
若主码为E,E->AB,AB->C。为第二范式
例题4:F={A->B,B- >A,A->C},为第几范式?
主码为A或B。
若主码为A,A->B,A->C。为第三范式
若主码为B,B->A,A->C,但A->B。为第三范式