基本概念
关系模式R(U,F) -> R关系模式中U为其属性,F为其依赖关系。
函数依赖:X是一个/一组属性,Y是一个/一组属性,如果Y被X所决定,则称Y属性依赖于X;
完全/部分函数依赖:在函数依赖的基础上,如果任何X的子集都无法决定Y,则称Y完全依赖于X,反之为部分函数依赖。
主属性/非主属性:主键中的属性为主属性,反之为非主属性。这个概念在数据库3范式中会用到。
数据库范式
1NF: 属性的原子性,一个属性不可在拆。
2NF: 每个非主属性完全依赖于主键/候选键(组合键),而不是部分依赖于候选键的一部分。
例子:选课关系表(学号、姓名、年龄、课程名称、学分)中候选键为(学号、课程名称)
学号 <- (姓名,年龄)
课程名称 <- 学分
其中非主属性学分, 姓名和年龄部分依赖于候选键,因此不满足2NF
3NF: 不存在非主属性的依赖传递。非主属性A <- 非主属性B <- 主键
例子: (学号、姓名、年龄、学分、学分是否通过)
学号 <- 学分 <- 学分是否通过
BCNF:对于3NF的补充,不存在主属性的依赖传递。
4NF: 不存在非平凡且非函数依赖的多值依赖。(双非一多)
平凡依赖:若X->Y,且Y是X的子集
非平凡依赖:若X->Y,且Y不是X的子集
关系模式分解
无损连接:将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍然能还原到原来的关系模式,则称这种分解为无损连接。
考法:
通过依赖关系确认主键/候选键?
1、R上的函数依赖集F={A1A3->A2、A2->A3},R有几个候选键
2、冗余、插入异常、更新异常和删除异常产生的原因?
判断是否是无损连接
1、函数依赖判断便捷法:这种快捷方法是有前提的,前提就是分解后的关系模式只有两个如果R1∩R2 → R1 - R2或R1∩R2 → R2 - R1,则分解是无损连接的。
【例题】
关系模式R(U,F),其中U={W,X,Y,Z},F={WX→Y,W→X, X→Z,Y→W}。那么p={R1(WXY),R2(XZ)} 分解中是无损分解。
R1∩R2={X},R1-R2={WY},R2-R1={Z},根据函数依赖集,X→Z成立,所以满足条件。
2. 建立表格:通过建立一张i列j行的表,每列对应一个属性,每行对应分解中的一个关系模式。
把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中的元素。
修改方法如下:对于F中一个FD:X→Y,如果表格中有两行在X分量上相等,在Y分量上不相等,那么把这两行在Y分量上改成相等。如果Y的分量中有一个是aj,那么另一个也改成aj;如果没有aj,那么用其中的一个bij替换另一个(尽量把ij改成较小的数,亦即取i值较小的那个)。
【例题】
设关系模式 R为 R(H,I,J,K,L),R上的一个函数依赖集为 F={H→J,J→K,I→J,JL→H},分解 (p={HIL,IKL,IJL}) 是无损连接的。
试题分析:
根据上述判断方法,我们列出选项B(分解成三个关系模式R1(HIL)、R2(IKL)、R3(IJL) )的初始表如表3所示:
对于函数依赖集中的H→J、J→K对表3进行处理,由于属性列H和属性列J上无相同的元素,所以无法修改。但对于I→J在属性列I上对应的1、2、3行上全为a2元素,所以,将属性列J的第一行b13和第二行b23改为a3。修改后如表4所示:
对于函数依赖集中的JL→H在属性列J和L上对应的1、2、3行上为a3、a5元素,所以,将属性列H的第二行b21和第三行b31改为a1。修改后如表5所示:
从表5可以看出,第二行为a1、a2、a3、a4、a5,所以分解p是无损的。
小试牛刀

传递函数依赖:候选键:学号; 学号 <- 系号 <- 系名; 不满足3NF,最高属于2NF
S∩D=系号
S-D=学号,姓名,性别,年龄
D-S=系名
系名依赖于系号,S∩D -> D-S因此是无损连接。