关系规范化理论

MySQL-关系规范化

几个概念:

有集合{a,b,c,d,e}

码 \textcolor{purple}{码} :能确定整个集合(元组)的所有组合(属性列)。 比如{a},{a,b,c},{a,c,d}等等都可以确定整个集合,尽 管有的存在冗余,但是它们都是码。

候 选 码 \textcolor{purple}{候选码} :含有属性最少的能确定整个集合的小集合。例如如果{a,b}能确定整个集合,但{a},{b}都不能单独确定整个集合,那么{a,b}就是一个候选码。 候 选 码 的 真 子 集 中 不 存 在 码 \textcolor{red}{候选码的真子集中不存在码}

主 码 \textcolor{purple}{主码} :是任意一个候选码,可以人为选定。

外 码 \textcolor{purple}{外码} :如果{a,b,c}不是{a,b,c,d,e}的码,但是另一个集合{a,b,c,d,e,f}的码,那{a,b,c}就是{a,b,c,d,e}的一个外码。

主 属 性 \textcolor{purple}{主属性} :候选码所有属性的并集

非 主 属 性 \textcolor{purple}{非主属性} :不包含在任何码里的属性,例如每个能确定集合{a,b,c,d,e}的小集合里面都没有e,那e就是非主属性。

image-20220423200247513

范式

关系型数据库中,数据表设计的基本原则

image-20220423194549185

函数依赖:完全、部分、传递

image-20220423194946659

1.第一范式

原子的,一个格里就一个数据

2.第二范式

满足条件:

(1)满足第一范式

(2)必有主键,且 非 主 属 性 必 须 完 全 函 数 依 赖 于 主 键 ( 候 选 键 ) \textcolor{red}{非主属性必须完全函数依赖于主键(候选键)}

球员编号 比赛编号 姓名 年龄 比赛时间 比赛场地
(球员编号, 比赛编号) → (姓名, 年龄, 比赛时间, 比赛场地)
(球员编号) → (姓名,年龄) 姓 名 、 年 龄 部 分 依 赖 于 主 键 , 不 满 足 第 二 范 式 \textcolor{red}{姓名、年龄部分依赖于主键,不满足第二范式}
所以要改进为第二范式,分成三张表:
image-20220423202304459
此时每张表都符合第二范式

3.第三范式

满足条件

(1)满足第一范式,且每一个非主属性既不 部 分 \textcolor{red}{部分} 依赖于码,也不 传 递 \textcolor{red}{传递} 依赖于码。

(2)满足第二范式,且每一个非主属性不 传 递 \textcolor{red}{传递} 依赖于码

球员编号 姓名 球队名称 球队教练
image-20220423214231064
存在传递依赖,所以不满足第三范式
如果分成两张表:
image-20220423215025281
此时满足第三范式

4.巴斯范式

满足条件:

(1)满足第三范式

(2)主属性既不 部 分 \textcolor{red}{部分} 依赖也不 传 递 \textcolor{red}{传递} 依赖于候选键

学生ID 专业 导师 专业GPA
1 AI Tom
2 大数据 Landa
1 大数据 Landa
3 大数据 Judy
已知其中学生ID和专业是主键
显然满足第三范式,但是主属性专业依赖于导师,{学生ID,导师}也是一个候选键,所以主属性部分依赖于候选键,不符合巴斯范式。
如果分成两张表:
image-20220424082132028
此时满足巴斯范式

逻辑蕴含

对于关系R(U,F),X—>Y不在F中,但X—>Y可以由F导出,则F逻辑蕴含X—>Y。

举例:image-20220424092817987

ArmStrong公理系统

image-20220424091207969
例:
image-20220424093119384

属性集闭包

X关于函数依赖集F的闭包:

(1)X⊆U,例如U={A,B,C,D},X可以是{A},{A,D}等等。

(2)F是一堆函数依赖的集合,例如A—>B,A—>D等等。

(3)

X F + = A ∣ X — > A 可 以 由 F 根 据 A r m S t r o n g 公 理 系 统 推 出 X^+_F={A|X—>A可以由F根据ArmStrong公理系统推出} XF+=AX>AFArmStrong

举个例子:
image-20220424095513895
求 属 性 集 闭 包 : \textcolor{red}{求属性集闭包:}
image-20220424103826684 img

码值理论

属性分四类:

(1)L类:只出现在F中依赖关系左边的属性,如:X—>Y ,只出现在X处的属性。

(2)R类:只出现在F中依赖关系右边的属性,如:X—>Y ,只出现在Y处的属性。

(3)N类:F中依赖关系左右两边都没出现的属性。

(4)LR类:F中依赖关系左右两边都出现的属性。

定理1:如果属性是L或者N类,那它 一 定 \textcolor{red}{一定} 是R的候选码的成员,如果是R类, 必 不 \textcolor{red}{必不} 在任何候选码中,如果是LR类, 可 能 \textcolor{red}{可能} 是R候选码的成员。

定理2:如果X(X∈R)是L类和N类属性的并集,且image-20220424105859545包含R的全部属性,那么X就是R的唯一候选码。

候选关键字求解算法:

image-20220424155552622
举例:
image-20220424160411835 image-20220424163811273

函数依赖集的等价与覆盖

1.等价:

image-20220424165447974

2.依赖集:

image-20220425195410397
例题:
image-20220425195727794 img

3.最小依赖集:

也叫最小覆盖
F是最小依赖集要满足条件:

(1)右单一属性:F中的函数依赖,右边只能有一个属性

(2)无冗余: 如果F中有这样一个依赖:X—>A,当F刨去X—>A时,发现与原F等价,则不满足最小依赖。

(3)决定因素不冗余:如果F中有这样一个依赖:X—>A,X有个真子集Z,当F刨去X—>A,又加上Z—>A时,发现还与原F等价,则不满足最小依赖。

例:
image-20220424170725505
很显然F是最小依赖,但是F’不是,F‘去掉(SNO,SDEPT)—>SDEPT之后,还能跟原F’等价。
求 最 小 依 赖 集 ( F m ) 的 算 法 \textcolor{red}{求最小依赖集(Fm)的算法} Fm)
image-20220424190642007
例题:
例1image-20220424191928858
img
例2:image-20220424193300866
img

模式分解

概念:
image-20220425194928978

1.无损连接性

image-20220425200704281
判断方法(以题举例):
image-20220425200929622

第一步:建表T

A B C D E F
ABC a1 a2 a3 b14 b15 b16
CD b21 b22 a3 a4 b25 b26
DEF b31 b32 b33 a4 a5 a6
image-20220425201754743

第二步:逐个考察函数依赖,修改表

A B C D E F
ABC a1 a2 a3 a 4 \textcolor{red}{a4} a4 a 5 \textcolor{red}{a5} a5 a 6 \textcolor{red}{a6} a6
CD b21 b22 a3 a4 a 5 \textcolor{red}{a5} a5 a 6 \textcolor{red}{a6} a6
DEF b31 b32 b33 a4 a5 a6

第三步:观察新表,若其中有一行已变成a1,a2,a3…ak,则满足无损连接性

2.独立投影法则

判断无损连接性的一种方法,但是条件是R 只 被 分 解 为 两 个 关 系 模 式 \textcolor{red}{只被分解为两个关系模式}
image-20220425203048204
例题:
image-20220425203223055

3.函数依赖保持性

若R(U,F)的一个分解image-20220425203841450的所有函数依赖的并集(F1UF2UF3U…UFk)逻辑蕴含了函数F中的所有函数依赖,则其具有函数依赖保持性。
例:
image-20220425220137485 img

4.模式分解算法

一个模式分解必须满足以下条件:

(1)无损连接性

(2)依赖保持性

(3)某一范式

分解算法1:

转换为3NF的保持函数依赖的分解(考虑范式和函数依赖保持性,忽略无损连接性)

步骤:

(1)求F的最小依赖集,记为G

(2)找出不在G中出现的属性,把这些属性构成一个关系模式,把这些属性从U中去掉,剩余的属性记为W

(3)若G中存在这样一个依赖关系X—>A,XA=W,image-20220426101916442={R},R={X,A},算法中止

(4)否则,把每一个X—>A变成Ri={X,A},image-20220426101916442={R1,R2,…Rk},算法结束

例:
image-20220426103747376 img

分解算法2:

结果为3NF,且具有依赖保持和连接不失真的分解

步骤:

(1)算一遍分解算法1,求出各个分组(R1,R2…)

(2)求原F的候选码KEY,依据码值定理

(3)如果求出的候选码KEY包含在由分解算法1求出的各函数依赖关系中,舍弃,否则并进来

例:
image-20220426113716978 image-20220426141612972
例:
image-20220426145833724 img

主码,候选码等之间关系的图片引用自https://blog.csdn.net/sumaliqinghua/article/details/85872446

猜你喜欢

转载自blog.csdn.net/qq_53162179/article/details/124429389