数据库系统概论高级
为什么要学数据库理论?
关系模式存在的问题
1.数据冗余度太大,浪费存储空间
2.更新异常
3.插入异常
4.删除异常
好的模式?
不会发生插入异常,删除异常,更新异常、数据冗余应尽量少。
问题原因:
由于模式中的某些数据依赖引起的。
解决方法:
用规范化理论改造关系模式,消除其中不合适的数据依赖。
什么是数据依赖?
eg:
STUDENT(Sno,Sdept,Mname,Cno,Grade)
该关系模式的属性集合记为U:
U={Sno,Sdept,Mname,Cno,Grade}
- 数学中的函数y=f(x),自变量x确定以后,相应的y也唯一确定
- Sdept=f(Sno),Sno函数确定Sdept,记为Sno->Sdept
- Mname=f(Sdept),Sdept函数确定Mname,记为Sdept->Mname
- Grade=f((Sno,Cno)),(Sno,Cno)函数确定Grade,记为
属性组U上的函数依赖集合,记为F:
F={Sno->Sdept,Sdept->Mname,(Sno,Cno)->Grade}
数据依赖
1.完整性约束的一种表现形式
- 限定属性取值范围:例如学生的成绩必须在0-100之间
- 定义属性值间的相互关联(主要体现值的相等与否),即通过属性间值的相等与否来描述
- 它是数据库式设计的关键
2.数据依赖
- 是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系
- 是实现世界属性间相互联系的抽象
- 是数据内在的性质
- 是语义的体现
3.数据依赖的主要类型
- 函数依赖(Functional Dependency),简记为FD
- 多值依赖(Mutivalued Dependency),简记为MVD
- 连接依赖
- ……
4.数据依赖对关系模式的影响
- 不合适的数据依赖,造成插入异常、删除异常、更新异常和数据冗余问题
关系模式简化表示
1.关系模式的形式化定义
R(U,D,DOM,F)
- R:关系名,是符号化的元组语义
- U:该关系的属性集合
- D:属性组U中属性所来自的域
- DOM:属性向域的映像集合
- F:属性间数据的依赖关系集合
2.关系模式的简化表示
R<U,F>
将关系模式简化为一个三元组,影响数据库模式设计的主要是U和F
当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系
规范化
函数依赖
函数依赖
X函数确定Y或Y函数依赖于X,记作X->Y.
X称为这个函数依赖的决定属性组,也称为决定因素。
函数依赖是指关系模式R在任何时刻的关系实例均要满足的约束条件。
不是指某个或某些关系实例r满足的约束条件,而是指R的所有关系实例r均要满足约束条件。
平凡函数依赖与非平凡函数依赖
X->Y,Y⫋X,则称X->Y是非平凡的函数依赖
X->Y,Y⊆X,则称X->Y是非平凡的函数依赖
eg:
在关系SC(Sno,Cno,Grade)中,
非平凡函数依赖:(Sno,Cno)->Grade
平凡函数依赖:(Sno,Cno)->Sno
(Sno,Cno)->Cno
一般平凡函数依赖一定成立,所以我们只讨论非平凡函数依赖
完全函数依赖与部分函数依赖
在关系STUDENT (Sno,Sdept,Mnaem,Cno,Grade)
(Sno,Cno)–F->Grade是完全函数依赖
(Sno,Cno)–p->Sdept是部分函数依赖,因为Sno—>Sdept
传递函数依赖
eg:在关系STUDENT(Sno,Sdept,Mname,Cno,Grade)
Sno–>Sdept,Sdept–>Mname,Sno—传递->Mname
键
eg:
S(Sno,Sdept,Sage)
Sno—>(Sno,Sdept,Sage),Sno是键
(Sno,Sdept)、(Sno,Sage)、(Sno,Sdept,Sage)是超码
SC(Sno,Cno,Grade)中,(Sno,Cno)是码
- 若关系模式R有多个候选码,则选定其中一个作为主码。
主属性与非主属性
- 包含在任何一个候选键中的属性,称为主属性
- 不包含在任何键中的属性称为非主属性
eg:S(Sno,Sdept,Sage),Sno是键,Sno是主属性,Sdept,Sage是非主属性
SC(Sno,Cno,Grade)中,(Sno,Cno)是键
Sno,Cno是主属性,Grade是非主属性
全键
整个属性组是键,称为全键
外键
关系模式R<U,F>,U中属性或属性组X并非R的键,但X是另一个关系模式的键,则称X是R的外键。
第二范式(2NF)
范式是符合某一种级别的关系模式的集合。
关系数据库中的关系必须满足一定的要求。
满足不同程度要求的为不同范式。
范式的种类
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF,boyce和Codd共同提出的范式)
第四范式(4NF)
第五范式(5NF)
各种范式之间存在联系:
1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF
某一关系模式R为第n范式,可简记为R∈nNF
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程叫做规范化。
第一范式
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
通俗地讲:不允许表中有表
但是满足第一范式的关系模式并不一定是一个好的关系模式。
第二范式
若关系模式R∈1NF,并且每一个非主属性都完全依赖于R的键,则R∈2NF。
eg:关系模式S-L-C(Sno,Cno,Sdept,Sloc,Grade)
Sloc为学生住处,假设每个系的学生住在同一个楼。
S-L-C满足第一范式。
S-L-C的键为(Sco,Cno),主属性:Sno,Cno
非主属性:Grade,Sdept,Sloc
非主属性Sdept和Sloc部分函数依赖于键(Sno,Cno)
S-L-C(Sno,Cno,Sdept,Sloc,Grade)∈1NF
S-L-C(Sno,Cno,Sdept,Sloc,Grade)∉2NF
第二范式(Second Normal Form,2nd NF)是指每个表必须有主关键字(Primary key),其他数据元素与主关键字一一对应。通常称这种关系为函数依赖(Functional dependence)关系,即表中其他数据元素都依赖于主关键字,或称该数据元素惟一地被主关键字所标识。第二范式是数据库规范化中所使用的一种正规形式。它的规则是要求数据表里的所有非主属性都要和该数据表的主键有完全依赖关系;如果有哪些非主属性只和主键的一部份有关的话,它就不符合第二范式。同时可以得出:如果一个数据表的主键只有单一一个字段的话,它就一定符合第二范式(前提是该数据表符合第一范式)。
简单的来说,就是把第一范式的表再拆分为两个表。
第三范式 (3NF)
第三范式(Third Normal Form,3rd NF)就是指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。也就是说,对于一个满足2nd NF 的数据结构来说,表中有可能存在某些数据元素依赖于其他非关键字数据元素的现象,必须消除。
简单地来说,就是把第二范式的表再拆分。