🐒求候选键:
- 只出现在函数依赖(FD)左边的,或者没出现在 FD 中的属性一定是主属性。(组成候选键的属性都叫主属性)
- 只出现在函数依赖右边的属性一定是非主属性。(不是主属性即为非主属性)
- 如果一个只出现在函数依赖左边的属性它的闭包包含了所有的属性,则它是唯一候选键
例:
设关系模式 \(R(ABCDEG),F = \{A → D,E → D,D → B,CD → A\}\)
求 R 的候选键:
可得 C、E、G 一定是主属性,这时分别求它们的闭包,发现:C+ = {C}; E+ = {EDB};都 ≠ U。但是:CE+ = {CEDBA}, 那么 CEG 就是 R 的候选键,相应的,C、E、G 都是主属性。
🖊 判断范式步骤
以上面的题为例
- 先求 \(F_{min}\)
- 再求出候选键
CEG - 每个 FD 的左部都是超键——BCNF
FD 中没有左部包含 CEG 的依赖,故 R 不是 BCNF - 每一个属性都不依赖于其它非主属性——3NF
C、E、G 是主属性,FD 中有 A → D,D → B,CD → A;这些都依赖于非主属性,故 R 不是 3NF - 每一个非主属性都完全依赖于 R 的候选键——2NF
可知非主属性 A、B、D, FD 中有 E → D,由于 E ⊂ CEG,所以非主属性 D 不完全依赖于 CEG,故 R 不是 2NF - 否则是 1NF
上面例题可以判断,应该是 1NF。
👫完全函数依赖:
对于函数依赖 W → A,如果还有 X ⊂ W (X 是 W 中的一个属性(真子集))使得 X → A 成立,那么 W → A 就是一个局部依赖;否则 W → A 为完全依赖。
👶 第一范式(1NF)
定义:
- 关系模式 R 的所有属性都是不可分的原子属性,则 R 是 1NF。属性不可拆。
👨第二范式(2NF)
定义:
- 若关系模式 R 是 1NF,并且每个非主属性都完全依赖于 R 的候选键,则 R 是 2NF
👴第三范式(3NF)
定义:
关系模式 R 是 2NF,且每个非主属性都不传递依赖于 R 的候选键。
百度上有一句对第 3NF 非常经典的解释:“简而言之,第三范式就是每一个属性都不依赖于其它非主属性。”
👪BCNF范式
定义:
- 若关系模式 R 是 1NF,并且每个属性都不传递依赖于 R 的候选键,则 R 是 BCNF。
- 还有这个等价定义:对 FD 中每个非平凡的 X → Y(非平凡表示:Y ∉ X),都有 X 是 R 的超键。
- 常用的判断方式是:每一个属性都依赖于超键,则 R 是 BCNF。
📚例题
判断下列关系模式的范式:
- R1(ABC), F={AB→C}
候选键:AB,FD 的左部都是超键(包含 AB),故为 BCNF。 - R2(ABC), F={A→B,A→C}
候选键:A,FD 的左部都是超键,故为 BCNF。 - R3(ABC), F={AC→B,B→C}
候选键:AC,左部不都是超键,不是 BCNF;C 依赖于非主属性 B,不是 3NF;每个非主属性完全依赖于 AC,故为 2NF。 - R4(ABCD), F={AB→C,B→D}
候选键:AB,可知不是 BCNF;每一个属性都不依赖于非主属性,故为 3NF。 - R5(ABC), F={A→BC,B→A,B→C}
候选键:A、B;左部都是超键(包含 A、B),故为 BCNF。 - R6(ABC), F={A→B,B→C,C→A}
候选键:A、B、C;左部都是超键(包含 A、B、C),故为 BCNF。
📕做完了,来一大碗宽面!🍜