函数依赖
- 函数依赖:
类似于数学中的函数的概念,X,Y是属性集U 的子集,不存在两个元组在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
- 部分函数依赖:X->Y,存在一个真子集 X' 依赖 Y
- 依赖传递:X-> Y,Y->Z;但是 Y(不 ->)X, Z也不是 Y的子集。
码
- 候选码(完全函数依赖)
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能。
- 主属性
候选码的诸属性称为主属性。
- 非主属性
不包含在任何候选码中的属性
- 超码(部分函数依赖)
候选码是最小的超码
- 全码
所有属性当作一个码。若关系中只有一个候选码,且这个候选码中包含全部属性,则该候选码为全码
码的选择
一个联系转化为一个关系模式,与该联系相连的各实体的码以及联系的属性转化为关系的属性,该关系的码则有三种情况:
若联系为1:1,则每个实体的码均是该关系的后选码。
若联系为1:n,则关系的码为n端实体的码。(学校和学生,一个学校有n个学生,一个学生有一个学校,码选择的是学生)
若联系为m:n,则关系的码为诸实体码的组合。
规范化
1NF:每一个分量是不可分的数据项。
2NF:每一个非主属性完全函数依赖于任何一个候选码。
这里有两类非主属性,一类是Grade,对码是完全函数依赖; 另一类如sdept, sloc,他们对码不是完全函数依赖。解决方法是投影分解成两个关系模式。
修改后,每一个非主属性都是对码完全函数依赖。
3NF :消除了非主属性对码的传递函数依赖。
上图6.4符合3NF,但是 6.5不符合。因为 3NF在2NF的基础上(不存在部分依赖于码),且每一个非主属性不传递依赖于码。
BCNF:消除了任何属性对码的传递函数依赖和部分函数依赖。
STJ不是BCNF关系,因为 主属性 J对码有传递函数依赖。
4NF:消除多值依赖
范式越低,查询成本越低;范式越高,查询成本越高。
低范式到高范式是通过分解实现的,关系会变多,查询时会涉及多表连接。
选择题
解析:BCNF要求在 3NF的基础上消除主属性对码的部分和传递函数依赖。
3.在关系模式的分解中,保持函数依赖分解最高可以达到(3NF)。
4.在关系模式的分解中,满足无损失连接最高可以达到(4NF)。
5.最小函数依赖集
(1)在关系模式R(U,F)中,如果F是最小函数依赖集,则 R的规范化程度与F是否最小函数依赖集无关