数据库复习——范式(Normal Form)

因为上课的时候一直在摸鱼没有听懂,所以复习的时候理解一下数据库中关于范式 的相关知识点。涉及范式的定义 ,以及给定一个函数依赖集判断是那种范式的方法

范式

迄今为止一共提出了 6 6 6 种范式,他们的关系是 5 N F ⊂ 4 N F ⊂ B C N F ⊂ 3 N F ⊂ 2 N F ⊂ 1 N F 5\rm{NF}\subset 4NF\subset BCNF\subset3NF\subset2NF\subset1NF 5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF,在这里我们只讨论后 4 4 4 个范式(不讨论 4 N F 4\rm NF 4NF 和 5 N F 5\rm NF 5NF)。

第一范式(1NF)

这是关系型数据库最基本的要求。只要是关系型数据库中的关系(即没有"表中有表"等问题),那么它就是 1 N F \rm1NF 1NF。

第二范式(2NF)

定义 :若 R ∈ 1 N F R\in1\rm NF R∈1NF,且每一个非主属性完全函数 依赖于任何一个候选码,则 R ∈ 2 N F R\in\rm2NF R∈2NF。(定义太绕,建议看解读。)

非主属性:一个关系可能有很多候选码,在候选码里面的都是主属性;不在候选码里面的就是非主属性。比如关系 R ( A , B , C , D , E , F ) R(A,B,C,D,E,F) R(A,B,C,D,E,F) 有 3 3 3 个候选码 A B C \mathit{ABC} ABC, C E \mathit{CE} CE 和 D D D,那么主属性就是 A B C D E \mathit{ABCDE} ABCDE,非主属性就是 F F F。

解读 :只要不存在非主属性 对码的部分 依赖,就属于第二范式。

举一个不是第二范式的例子,关系 R ( A , B , C , D ) R(A,B,C,D) R(A,B,C,D) 里面,已知它的码是 A B \mathit{AB} AB,并且有函数依赖 B → D B\rightarrow D B→D。由于不需要知道 A B AB AB,只需要知道其一部分 B B B 就可以得出非主属性 D D D,因此 R R R 不是第二范式。

第三范式(3NF)

定义 :设关系模式 R < U , F > ∈ 1 N F R<U,F>\in 1\rm NF R<U,F>∈1NF,若 R R R 中不存在这样的码 X X X,属性组 Y Y Y 及非主属性 Z ( Z ⊉ Y ) Z(Z\nsupseteq Y) Z(Z⊉Y) 使得 X → Y X\rightarrow Y X→Y, Y → Z Y\rightarrow Z Y→Z 成立, Y ↛ X Y\nrightarrow X Y↛X,则称 R ∈ 3 N F R\in3\rm NF R∈3NF。

这里强调 Y ↛ X Y\nrightarrow X Y↛X 是为了 Z Z Z 对 X X X 的传递依赖 成立。如果 Y → X Y\rightarrow X Y→X,那么 Z Z Z 对 X X X 就是直接函数依赖

解读 :只要不存在非主属性 对码的部分和传递 依赖,就属于第三范式。实际上,只要消除了传递依赖 ,也就顺便消除了部分依赖 ,所以判定是不是 3 N F 3\rm NF 3NF 时只需看是否存在传递依赖就好了。

举一个不是第三范式的例子,关系 R ( A , B , C ) R(A,B,C) R(A,B,C) 中,已知它的码是 A A A,存在函数依赖 F = { A → B , B → C , A → C } F=\{A\rightarrow B,B\rightarrow C,A\rightarrow C\} F={A→B,B→C,A→C}。既然 A A A 能够决定 B B B,然后 B B B 又决定 C C C,那么就有 A → 传递 C A\xrightarrow{传递}C A传递 C,所以不是第三范式。

注意这个例子中, C C C 不是主属性。

BC范式(BCNF)

定义 :设关系模式 R < U , F > ∈ 1 N F R<U,F>\in1\rm NF R<U,F>∈1NF,若 R R R 中不存在这样的码 X X X,若 X → Y X\rightarrow Y X→Y 且 Y ⊈ X Y\nsubseteq X Y⊈X 时 X X X 必含有码,则 R ∈ B C N F R\in\rm BCNF R∈BCNF。

解读 :只要所有函数依赖的决定因素都含有码,那么就是BC范式。

举一个不是BC范式的例子,关系 R ( S , T , J ) R(S,T,J) R(S,T,J) 里面的候选码有 ( S , J ) (S,J) (S,J) 和 ( S , T ) (S,T) (S,T),并且存在函数依赖 F = { ( S , J ) → T , ( S , T ) → J , T → J } F=\{(S,J)\rightarrow T,(S,T)\rightarrow J,T\rightarrow J\} F={(S,J)→T,(S,T)→J,T→J}。这个关系的决定因素 { ( S , J ) , ( S , T ) , T } \{(S,J),(S,T),T\} {(S,J),(S,T),T} 里面, T T T 是不含码的(虽然是候选码的一部分,但是没有完整包含候选码),所以它不是BC范式。


各种范式之间的关系总结如下:

练习

1 1 1.指出下列关系模式最高是第几范式(不考虑 4 N F , 5 N F \rm4NF,5NF 4NF,5NF)?
( 1 ) (1) (1) R ( X , Y , Z ) , F = { X Y → Z } R(X,Y,Z),F=\{\mathit{XY}→Z\} R(X,Y,Z),F={XY→Z},侯选码 X Y \mathit{XY} XY。
( 2 ) (2) (2) R ( X , Y , Z ) , F = { Y → Z , X Z → Y } R(X,Y,Z),F=\{Y→Z, \mathit{XZ}→Y\} R(X,Y,Z),F={Y→Z,XZ→Y},侯选码 X Y \mathit{XY} XY 与 X Z \mathit{XZ} XZ。
( 3 ) (3) (3) R ( X , Y , Z ) , F = { X → Y , X → Z } R(X,Y,Z),F=\{X→Y, X →Z\} R(X,Y,Z),F={X→Y,X→Z},侯选码 X X X。
( 4 ) (4) (4) R ( W , X , Y , Z ) F = { X → Z , W X → Y } R(W,X,Y,Z) F=\{X→Z, \mathit{WX}→Y\} R(W,X,Y,Z)F={X→Z,WX→Y},候选码 W X \mathit{WX} WX。

答案
( 1 ) (1) (1) 所有函数依赖的决定因素 { X Y } \{{XY}\} {XY} 都含有码 X Y \mathit{XY} XY,因此最高是 B C N F \rm BCNF BCNF。
( 2 ) (2) (2) 没有非主属性,因此至少是 3 N F \rm 3NF 3NF。由于存在一个决定因素 Y Y Y 不含码,因而不是 B C N F \rm BCNF BCNF,所以最高是 3 N F \rm3NF 3NF。

TIPS: 2 N F \rm2NF 2NF 和 3 N F \rm3NF 3NF 都是对非主属性 作出要求,如果一个关系本身就没有非主属性,那么这些要求自然就是满足的,因此该关系至少是 3 N F \rm 3NF 3NF。

( 3 ) (3) (3) 同 ( 1 ) (1) (1),决定因素 { X } \{X\} {X} 都含有码 X X X,因而最高是 B C N F \rm BCNF BCNF。
( 4 ) (4) (4) Z Z Z 是非主属性, Z Z Z 依赖于 X X X,然而 X X X 是候选码 W X \mathit{WX} WX 的子集。因此存在非主属性对码的部分函数依赖 ,不是 2 N F \rm 2NF 2NF,因此最高是 1 N F 1\rm NF 1NF。


2 2 2.考虑关系模式 R ( A , B , C , D ) R(A,B,C,D) R(A,B,C,D),写出满足下列函数依赖时 R R R 的码,并给出 R R R 最高属于哪种范式?( 1 N F , 2 N F , 3 N F \rm1NF,2NF,3NF 1NF,2NF,3NF 或 B C N F \rm BCNF BCNF)
( 1 ) (1) (1) B → D , A B → C \mathit{B→D,AB→C} B→D,AB→C
( 2 ) (2) (2) A → B , A → C , D → A A →B,A →C, D →A A→B,A→C,D→A
( 3 ) (3) (3) B C D → A , A → C \mathit{BCD}→A, A →C BCD→A,A→C
( 4 ) (4) (4) B → C , B → D , C D → A B→C, B→D,\mathit{CD}→A B→C,B→D,CD→A
( 5 ) (5) (5) A B D → C \mathit{ABD}→C ABD→C

答案

题号 最高属于哪个范式
( 1 ) (1) (1) A B \mathit{AB} AB 1 N F \rm1NF 1NF
( 2 ) (2) (2) D {D} D 2 N F \rm2NF 2NF
( 3 ) (3) (3) B C D , A B D \mathit{BCD,ABD} BCD,ABD 3 N F \rm 3NF 3NF
( 4 ) (4) (4) B B B 2 N F \rm 2NF 2NF
( 5 ) (5) (5) A B D \mathit{ABD} ABD B C N F \rm BCNF BCNF
相关推荐
森林猿29 分钟前
mongodb-数据备份和恢复
数据库·mongodb
oscube1 小时前
Apache AGE中的图
数据库·apache
科学的发展-只不过是读大自然写的代码1 小时前
qt播放视频
数据库·qt·音视频
激昂~逐流1 小时前
Qt使用sqlite数据库及项目实战
数据库·qt·sqlite·学生信息管理系统
svygh1232 小时前
数据库性能优化系统设计
数据库·性能优化·软件设计·系统设计·设计文档
wilsonzane3 小时前
Mongodb性能优化方法
数据库·mongodb
InterestingFigure3 小时前
Java 使用sql查询mongodb
java·开发语言·数据库·sql·mongodb
吹吹晚风-3 小时前
深入Django(三)
数据库·django·sqlite
xyh20043 小时前
python 10个自动化脚本
数据库·python·自动化
W Y3 小时前
【架构-20】死锁
java·数据库·架构··死锁·银行家算法