数据库作业15:第六章: 关系数据理论

前言

关系数据理论,虽然名字听上去高大上,说白了就是为了规范化数据库逻辑结构而产生的理论。
既然是规范化,也就意味着不遵守其规范也能完成功能。但是引用我的一位老师的比喻,实打实上阵,一眼就能区分出“正规军”还是“土八路”。
规范化的结构不仅迅速区分出业余人士和专业人士,并且可以很大程度上提高效率,规避错误。
并且所有“正规军”用同一套标准,对于专业人员之间的交流也起到很大作用。
好了,在了解完本章学习的必要性之后——打起精神。因为本章概念真的很多,但是不必害怕。虽然官方概念显得十分抽象,但是真正理解并不苦难。而且在一套完整的规范之下,它们结构清晰而严谨。

正文

首先,为了之后几个结构的叙述,我们要先约定几个概念。

关系模式
关系模式由五部分组成,是一个五元组:
R(U, D, DOM, F)
R是符号化的元组语义
U为一组属性
D为属性组U中的属性所来自的域
DOM为属性到域的映射
F为属性组U上的一组数据依赖

由于D、DOM与模式设计关系不大,
因此在本章中把关系模式看作一个三元组:R<U,F>

数据依赖:
是一个关系内部属性与属性之间的一种约束关系
主要类型:函数依赖,多值依赖
函数依赖:(类似于函数之间的对应,只不过变量替换成了属性组)
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。
若对于R(U)的任意一个可能的关系r,
r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,
记作X→Y。

X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
注:对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。
若不特别声明, 我们总是讨论非平凡函数依赖。

若X→Y,则X称为这个函数依赖的决定因素
若X→Y,Y→X,则记作X←→Y。
若Y不函数依赖于X,则记作X↛Y。

定义:
在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖

传递函数依赖
在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖
注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。

多值依赖:
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=Ф,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。


设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。

如果U部分函数依赖于K,即K → U,则K称为超码 。
候选码是最小的超码,即K的任意真子集都不是候选码。

若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。

主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性
不包含在任何码中的属性称为非主属性

整个属性组是码,称为全码(All-key)

关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。

好的,感谢你能看到这里。不得不承认,脱离具体事例去谈这些抽象的东西对精神真的是一种煎熬。至此,我们需要的工具已经齐全,我们将从解决实际问题的角度去继续学习。

还记得前言说的规范化的意义吗,其中有规避错误这一项。在实际应用中,普通的关系模式可能会隐藏相当多的问题,比如:
(1)数据冗余
浪费大量的存储空间:每一个系主任的姓名重复出现
(2)更新异常(Update Anomalies)
更新数据时,维护代价大:某系更换系主任后,须修改有关的每一个元组。
(3)插入异常(Insertion Anomalies)
如果一个系刚成立,尚无学生,则无法把这个系及其系主任存入数据库。
(4)删除异常(Deletion Anomalies)
如果某个系的学生全部毕业了, 则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
这些问题会为实际应用造成不小的麻烦。
造成它们的原因来自于逻辑结构内部的某些隐藏问题,用官方化来讲:
由存在于模式中的某些数据依赖引起的。
视具体情况对症的逐个修改或许可以消除它们,但不仅费时费力,而且没人能保证新的模式不会存在新的问题。
我们可以用规范化理论改造关系模式来消除其中不合适的数据依赖,进而避免上述问题。

为了规范化关系模式,我们再引入一个概念:范式
范式是符合某一种级别的关系模式的集合。
范式分为不同的层级,层级越高,需要满足的条件越苛刻。
同时,高级的范式兼容低级范式,这也意味着:
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。

第一范式:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)。

第二范式:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。

第三范式:设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。

通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。

第四范式:关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。

关系模式规范化的基本步骤

规范化的过程,即为消除决定因素非码的非平凡函数依赖的过程
1NF
↓ 消除非主属性对码的部分函数依赖
2NF
↓ 消除非主属性对码的传递函数依赖
3NF
↓ 消除主属性对码的部分和传递函数依赖
BCNF
↓ 消除非平凡且非函数依赖的多值依赖
4NF

不能说规范化程度越高的关系模式就越好。
必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。上面的规范化步骤可以在其中任何一步终止。
也就是说,在规范化过程中,尽量保持“够用就行”的态度,追求过高的规范程度,不仅增大开销,可能反而不利于关系的清晰表达。

练习题部分
在这里插入图片描述
在这里插入图片描述
比起打字,个人还是更习惯手写。
在这里插入图片描述
在这里插入图片描述
附加题部分:
一.
Y(X1,X2,X3,X4)
(X1,X2)→X3
X2→X4

  1. 侯选码?
  2. 属于第几范式?
    二.
    R(A,B,C,D)
    F={AB→D,AC→BD,B→C}
  3. 侯选码?
  4. 最高属于第几范式?
    三.
    R(X,Y,Z,W)
    F={Y←→W,XY→Z}
  5. 侯选码?
  6. 最高属于第几范式?
    四.
    R(A,B,C,D,E) F={A→B,CE→A,E→D}
  7. 求候选码。
  8. 最高属于第几范式,为什么?
  9. 分解到3NF。
    五.
    R(商店编号,商品编号,数量,部门编号,负责人)
    每个商店的每种商品只在一个部门销售,
    每个商店的每个部门只有一个负责人,
    每个商店的每种商品只有一个库存数量。
  10. 求候选码。
  11. R已达第几范式?为什么?
  12. 若不属于3NF,分解成3NF。
    六.
    R(A,B,C,D,E,F) F={A→C,AB→D,C→E,D→BF}
  13. 写出关键字。
  14. 分解到2NF。
  15. 分解到3NF。
  16. 分解到4NF。

【注】

AB→D 等价于 (A,B)→ D

D→BF 等价于 D→B, D→F
在这里插入图片描述
在这里插入图片描述
附加题的回答格式是我之后才看到的……所以会有几处(可能不止几处)格式不太正确。但是我实在是不想再写一遍,就这样吧……

必须承认,在开始做题之前,对所有的概念只能做到基本有印象。在做题过程中频繁的翻过书。在做过几道题之后,由于实在不堪忍受这种做题结果,对知识进行了系统的总结与理解,在这之后就十分顺利了。尤其是完成必做部分后,基本可以对概念融会贯通,附加题就显得十分容易了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值