目录
7. 关系数据库
第7章关系数据库上半部分总结:https://blog.youkuaiyun.com/u010257584/article/details/109742276
范式、无损连接和函数依赖是必须掌握的知识,也是历年真题必考知识点,所以,每一节的内容都很重要,加油学吧!
本章编辑真的难倒我了,数学符号较多,Markdown LateX数学公式要学一学,分享网友总结https://blog.youkuaiyun.com/coffee_cream/article/details/109599317。
7.5 规范化
范式关系:1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF。
7.5.1 第一范式(1NF)
若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式,记为R∈1NF。
同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
例如SC(sno,cno,sname,cname,grade)中,候选码为(sno,cno)。
F={(sno,cno)→grade,(sno,cno)→sname,(sno,cno)→cname,sno→sname,cno→cname}
存在的问题:
- 冗余度大,sno,sname,cno,sname都要与grade一样多。
- 因其修改操作的不一致性。
- 插入异常。
- 删除异常。
7.5.2 第二范式(2NF)
若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF.也就是2NF消除了1NF中非主属性对码的部分函数依赖。(属性完全依赖于主键,消除部分依赖)
第二范式表中的每个非键字段由整个主键确定,且不能由主键自身的一部分确定,因此,2NF的违例只会出现在主键是由超过一个字段构成的表中。
例如:在学生各课程学分关系中,SC(sno,cno,sname,cname,credit)关系分解为:Student(sno,sname)和Cource(cno,cname,credit),这两个关系模式就属于2NF。
7.5.3 第三范式(3NF)
若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性Z(Z⊊Y)使X→Y,( Y ↛ X Y↛X Y↛X)Y→Z成立,则关系模式R∈3NF,即在2NF基础上消除非主属性对码的传递函数依赖。
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,即表中不存在可以确定其他非关键字的非键字段。(属性不依赖于其他非主属性)
7.5.4 巴克斯范式(BCNF)
关系模式R∈1NF,若X→Y且Y⊊X时,X必含有码,则关系模式R∈BCNF。当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合BCNF。
这个范式特别用于处理非键字段确定主键的一部分主要的情况。
BCNF关系模式性质:
- 所有非主属性对每一个码都是完全函数依赖;
- 所有主属性对每一个不包含它的码,也就是完全函数依赖;
- 没有任何属性完全函数依赖于非码的任何一组属性。
R属于3NF,不一定属于BCNF,如果R属于BCNF,一定属于3NF。
例如(来源网友分享):假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的,但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式,存在如下问题:
- 删除异常:当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。
- 插入异常:当仓库没有存储任何物品时,无法给仓库分配管理员。
- 更新异常:如果仓库换了管理员,则表中所有行的管理员ID都要修改。
改进,把仓库管理关系表分解为二个关系表:
仓库管理:StorehouseManage(仓库ID, 管理员ID);
仓库:Storehouse(仓库ID, 存储物品ID, 数量)。
这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。
7.5.5 第四范式(4NF)
关系模式R∈1NF,若对于R的每个非平凡多值依赖X→→Y且Y⊊X时,X必含有码,则关系模式R∈4NF。4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。
若关系中的某一属性组的值能唯一地表示一个元组,而其真子集不行,则称该属性组为候选码。在全键表中,键的一部分可以确定至多一个其他字段的多个值,4NF仅用于全键表。
多值依赖(multivalued dependency,MVD)的概念:指可以控制或确定另一个字段的多个值的一个或一组字段,多值依赖即属性之间的一对多关系,记为K→→A。
函数依赖事实上是单值依赖,所以不能表达属性值之间的一对多关系。
平凡的多值依赖:全集U=K+A,一个K可以对应于多个A,即K→→A。此时整个表就是一组一对多关系。
非平凡的多值依赖:全集U=K+A+B,一个K可以对应于多个A,也可以对应于多个B,A与B互相独立,即K→→A,K→→B。整个表有多组一对多关系,且有:“一”部分是相同的属性集合,“多”部分是互相独立的属性集合。
注意,如果只考虑函数依赖,关系模式最高的规范化程度是BCNF;如果考虑多值依赖,关系模式最高的规范化程度是4NF。
例如,学生关系(学号,选修课程,兴趣爱好)如下:
分解为:
学生1(学号,选修课程)∈4NF
学生2(学号,兴趣爱好)∈4NF
7.5.6 第五范式(5NF,不考)
满足第四范式(4NF)的基础上,当且仅当R的每一个非平凡的连接依赖都被R的候选码所蕴含,记作5NF(消除不是由候选码所蕴含的连接依赖)。如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。
总结(理解并记下来):
检查范式违例:
1.当某个字段包含多个值会发生1NF违例。
2.2NF违例只会发生在具有关联键的表中,且非键字段只依赖于主键的一部分。
3.3NF违例发生在一个非键字段确定另一个非键字段的情况下,表可能有一个任何大小的键。
4.BCNF违例出现在非键字段确定主键的一部分的情况下,这些违例只能发生在主键是由关联键组成的表中。
5.4NF违例发生在表的主键至少由3个键连接而成且没有非键字段的情况下,此外,键的一部分确定键的另一部分的多个值。
解决范式违例的方法:就是将复式的确定因子拆成单一的确定因子。
7.6 Armstrong公理系统
7.6.1 Armstrong公理系统
Armstrong公理系统设关系模式R<U,F>,其中U为属性集,F是U上的一组函数依赖,那么有如下推理规则:
- A1自反律:若Y⊆X⊆U,则X→Y为F所蕴含;
- A2增广律:若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;
- A3传递律:若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。
根据上面三条推理规则,又可推出下面三条推理规则: - 合并规则:若X→Y,X→Z,则X→YZ为F所蕴含;
- 伪传递规则:若X→Y,WY→Z,则XW→Z为F所蕴含;
- 分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴含。
引理:X→A1A2…Ak成立的充分必要条件是X→Ai成立(i=1,2,…,k)。
1.函数依赖的闭包 F + F^+ F+及属性的闭包 X F + X_F^+ XF+
关系模式R(U,F)中为F所逻辑蕴含的函数依赖的全体称为F的闭包,记为 F + F^+ F+。
设F为属性集U上的一组函数依赖,X⊆U, X F + = { A ∣ X → A 能 由 F 根 据 A r m s t r o n g 公 理 导 出 } X_F^+=\{A|X→A能由F根据Armstrong公理导出\} XF+={ A∣X→A能由F根据Armstrong公理导出},则称 X F + X_F^+ XF+为属性集X关于函数依赖集F的闭包。
属性集X的闭包 X F + X_F^+ XF+是指所有能由X决定的属性集合。闭包就是由一个属性直接或间接推导出的所有属性的集合。
X F + X_F^+ XF+的算法:
(1)令 X 0 = X X^0=X X0=X,i=0;
(2)求B, B = { A ∣ ( ∃ v ) ( ∃ w ) ( V → W ∈ F ⋀ V ⊆ X i ⋀ A ∈ W ) } B=\{A|(∃v)(∃w)(V→W∈F⋀V⊆X^i⋀A∈W)\} B={
A∣(∃v)(∃w)(V→W∈F⋀V⊆Xi⋀A∈W)}
(3) X i + 1 = B ∪ X i X^{i+1}=B∪X^i Xi+1=B∪Xi
(4) X i + 1 = X i ? X^{i+1}=X^i? Xi+1