数据管理基础-ch32-36
ch 32 关系模式及范式
关系模式及第一范式(1 NF)
-
关系模式由五部分组成,是一个五元组:
R(U,D,DOM,F)
- 关系名R是符号化的元组语义
- U为一组属性
- D为属性组U中的属性所来自的域
- DOM为属性到域的映射
- F为属性组U上的一组数据依赖
-
由于D,DOM与模式设计关系不大,因此可以把关系模式看作一个三元组:R
- 当且仅当U上的一个关系r满足F时,r称为关系模式R的一个关系
- 作为二维表,关系要符合一个最基本的条件,每个分量必须是不可分开的数据项,满足了这个条件的关系模式就属于第一范式(1 NF)
-
数据依赖
- 是一个关系内部属性与属性之间的一种约束关系
- 通过属性间值的相等与否体现出来的数据间相互联系
- 是现实世界属性间相互联系的抽象
- 是数据内在的性质
- 是语义的体现
- 是一个关系内部属性与属性之间的一种约束关系
-
数据以来的主要类型
- 函数依赖(Functional Dependency,简记为FD)
- 多值依赖(Multi-Valued Dependency,简记为MVD)
函数依赖
-
函数依赖普遍存在在现实生活中
-
描述一个学生关系,可以有学号、姓名、系名等属性
-
一个学号值对应一个学生,一个学生只在一个系中学习
-
“学号”值确定后,学生的姓名及所在系的值就被唯一确定
Sname = f(Sno), Sdept = f(Sno)-记作Sno->Sname,Sno->Sdept
-
-
-
[例6.1] 建立一个描述学校教务的数据库。涉及的对象包括:
- 学生的学号(Sno)
- 所在系(Sdept)
- 系主任姓名(Mname)
- 课程号(Cno)
- 成绩(Grade)
-
假设学校教务的数据库模式用一个单一的关系模式Student来表示,则该关系模式的属性集合为:
U = {Sno,Sdept,Mname,Cno,Grade}
-
现实世界已知的事实
- 一个系有若干学生, 但一个学生只属于一个系;
- 一个系只有一名(正职)负责人;
- 一个学生可以选修多门课程,每门课程有若干学生选修;
- 每个学生学习每一门课程有一个成绩。
-
由此得到属性组U上的一组函数依赖F:
F = (Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade
1 NF的问题
1 NF的问题 1
- 关系模式Student存在的问题:
- 数据冗余
- 浪费大量的存储空间
- 修改复杂,更新异常(Update Anomalies)
- 数据冗余,更新数据时,维护数据完整性代价大
- 插入异常
- 删除异常
- 数据冗余
1 NF的问题 2
-
结论
- Student关系模式不是一个好的关系模式
-
原因
- 由存在于模式中的某些数据依赖引起的
-
解决方法
- 用规范化理论改造关系模式来消除其中不合适的数据依赖
-
把这个单一的模式分成三个关系模式:
S(Sno,Sdept,Sno->Sdept);SC(Sno,Cno,Grade,(Sno,Cno)->Grade);DEPT(Sdept,Mname,Sdept->Mname);
-
这三个模式不会发生插入异常,删除异常的问题,数据的冗余也得到了控制
范式
范式 1
- 范式是符合某一种级别的关系模式的集合。
- 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。
- 范式的种类:
- 第一范式(1NF)
- 第二范式(2NF)
- 第三范式(3NF)
- BC范式(BCNF)
- 第四范式(4NF)
- 第五范式(5NF)
范式 2
-
各种范式之间存在联系:
-
某一关系模式R为第n范式,可简记为R∈ n N FnNF nNF。
-
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)
-
ch 33 函数依赖与码
函数依赖
函数依赖 1
-
定义6.1 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y,X称为这个函数依赖的决定因素(Determinant)
-
[例] Student(Sno, Sname, Ssex, Sage, Sdept), 假设不允许重名,则有:
Sno → Ssex, Sno → SageSno → Sdept, Sno ←→ SnameSname → Ssex, Sname → SageSname → Sdept但Ssex ↛ Sage, Ssex ↛ Sdept
函数依赖 2
- 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
- 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。
- 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立
- 数据库设计者可以对现实世界作强制的规定。
- 例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则拒绝插入该元组。
平凡函数依赖与非平凡函数依赖
-
在关系模式R(U)中,对于U的子集X和Y,
- X→Y,但Y ⊈ X,则称X→Y是非平凡的函数依赖
- X→Y,但Y X, 则称X→Y是平凡的函数依赖
-
对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。因此若不特别声明, 我们总是讨论非平凡函数依赖
-
例:在关系SC(Sno, Cno, Grade)中
非平凡函数依赖: (Sno, Cno) → Grade 平凡函数依赖: (Sno, Cno) → Sno (Sno, Cno) → Cno
完全函数依赖与部分函数依赖
- 定义6.2 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X→F Y X\rightarrow^{F} Y X→FY。
- 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X→P Y X\rightarrow^{P} Y X→PY
传递函数依赖
码
码 1
码 2
外码
ch 34 1NF , 2NF, 3NF
1 NF
- 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
- 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
- 但是满足第一范式的关系模式并不一定是一个好的关系模式。