一个关系模式应当是五元组:R(U, D, DOM, F)
R是符号化的元组语义,是关系名
U是一组属性
D是属性组U中的属性所来自的域
DOM为属性到域的映射
F为属性组U上的一组数据依赖
由于D、DOM与模式设计关系不大,所以将关系模式看做一个三元组:R<U, F>
第一范式(1NF)
满足第一范式的条件:每一个分量必须是不可分的数据项。
数据依赖
定义:数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相关关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。
数据依赖分类:最重要的是函数依赖(Functional Dependency,FD)和多值依赖(Multi-Valued Dependency,MVD)。
函数依赖类似于一种函数关系Y=f(X),当属性X的值被唯一确定了,则属性Y的值就会唯一确定。类比学生(学号,姓名,系名)关系,当学生的学号唯一确定后,就可确定唯一的姓名。Sno决定Sname,或者说Sname依赖于Sno,记作Sno→Sname。
规范化
范式:关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。
一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程就叫规范化。
函数依赖
定义:设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y的属性值上不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。
函数雨来和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖。
- X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。eg:(Sno, Cno) → (Grade)
- X→Y,但Y包含于X,则称X→Y是平凡的函数依赖。eg: (Sno, Cno) → (Cno)
- 若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素。
完全函数依赖:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’不决定Y,则称Y对X完全函数依赖。
部分函数依赖:若X→Y,但Y不完全依赖于X,则称Y对X部分函数依赖。
传递函数依赖:Y非平凡函数依赖于X,Z非平凡函数依赖于Y,则称Z对X传递函数依赖。
2NF
定义:若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF。
一个关系模式R不属于2NF,就会产生问题:插入异常、删除异常、修改复杂。
3NF
定义:设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非主属性Z(Z不包含Y)使得X→Y,Y→Z成立,X不依赖于Y,则称R<U, F>∈3NF。(不能有非主属性组传递函数依赖于码)
BCNF☆
定义:关系模式R<U, F>∈1NF, 若X→Y且Y不包含于X时必含有码,则R<U, F>∈BCNF。即关系模式R<U, F>中,若每一个决定因素都包含码,则R<U, F>∈BCNF。
一个满足BCNF的关系模式有:
- 所有非主属性对每一个码都是完全函数依赖;
- 所有主属性对每一个不包含它的码也是完全函数依赖;
- 没有任何属性完全函数依赖于非码的任何一组属性。
3NF与BCNF的关系:
- 如果关系模式R<U, F>∈BCNF,则必有R<U, F>∈3NF
- 如果R<U, F>∈3NF,且R只有一个候选码,则有R<U, F>∈BCNF