1.问题的提出
关系模式由五部分组成,是一个五元组: R(U, D, DOM, F)
(1)关系名R是符号化的元组语义
(2)U为一组属性
(3)D为属性组U中的属性所来自的域
(4)DOM为属性到域的映射
(5)F为属性组U上的一组数据依赖
由于D、DOM与模式设计关系不大,因此在本章中把关系模式看作一个三元组:R<U,V>
当且仅当U上的一个关系r满足F时,r称为关系模式R<U,V>的一个关系。
关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
数据依赖的主要类型:
函数依赖(Functional Dependency,简记为FD)
多值依赖(Multi-Valued Dependency,简记为MVD)–不考
数据依赖:是一个关系内部属性与属性之间的一种约束关系,通过属性间值的相等与否体现出来的数据间相互联系。
例题:
关系模式Student<U, F>中存在的问题:
(1)数据冗余
浪费大量的存储空间
每一个系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。50个学生需要?
(2)更新异常(Update Anomalies)
数据冗余 ,更新数据时,维护数据完整性代价大。
某系更换系主任后,必须修改与该系学生有关的每一个元组。
(3)插入异常(Insertion Anomalies)
如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。(学生是主码)
(4)删除异常(Deletion Anomalies)
如果某个系的学生全部毕业了, 则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
🌟原因:由存在于模式中的某些数据依赖引起的。
🌟解决方法:用规范化理论改造关系模式来消除其中不合适的数据依赖
把这个单一的模式分成三个关系模式:
S(Sno,Sdept, Sno → Sdept);
SC(Sno,Cno,Grade, (Sno,Cno) → Grade);
DEPT(Sdept,Mname, Sdept → Mname);
这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。
这个过程称为规范化,解决异常、冗余的问题,对于应用程序,不是绝对的需求。
2.规范化(必考)
2.1函数依赖
//定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。(X不能出现重复,若重复,则不存在函数依赖)
理解:随便指定一个x,就能唯一确定一个y,没有多个y
函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。–(不考)
(学号,姓名,年龄)→( 学号,年龄)–平凡函数依赖
(学号,发型)→( 发型)–平凡函数依赖
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明, 我们总是讨论非平凡函数依赖。
、
定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → (F)Y。
举例:学号列X的每一个都能唯一找到姓名列Y中一个学生姓名,而Y的某些姓名在学号列的真子集X’中找不到对应的学号,即部分学号不能决定所有的姓名
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X ( P)→ Y
定义6.3 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z(Z⊈Y), 则称Z对X传递函数依赖(transitive functional dependency)。记为:X →(传递) Z。
注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
[例] 在关系Std(Sno, Sdept, Mname)中,有:
Sno → Sdept,Sdept → Mname,
Mname传递函数依赖于Sno
3.码
用函数依赖来定义吗啊,完全依赖(F),部分函数依赖(P)
(候选码就是完全函数依赖)
候选码是最小的超码。
若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
经常提到的主码或候选码都简称码。
全码:整个属性组是码,称为全码(All-key)
外码在参照完整性那块有提到过。外码在被参照关系中是主码。
4.范式—必考
关系数据库中的关系必须满足一定的要求。满足 不同程度要求的为不同范式。
某一关系模式R为第n范式,可简记为R∈nNF。
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
4.1第一范式
关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
4.2 2NF
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
理解:
一个或多个候选码,候选码里面的属性是主属性
不是主属性的,完全依赖于任何一个候选码
4.3 3NF
4.4BCNF
在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
非BCNF的关系模式也可以通过分解成为BCNF。例如STJ可分解为ST(S,T)与TJ(T,J),它们都是BCNF。
存在问题:
1.数据冗余问题
2.插入异常
若要新增一门课程 J3 及对应教师 T3,但尚无学生选择该课程(主码),则无法插入数据。
3. 删除异常
若删除某学生的选课记录,可能导致教师与课程的关联信息丢失。
4.更新异常
若修改某教师的授课课程,需同时更新所有相关记录,否则会导致数据不一致。
3NF允许主属性之间存在非候选码的决定因素,而 BCNF 不允许。
即:3NF 只限制非主属性的依赖,BCNF 进一步限制主属性的依赖。
3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。