数据库|关系的无损链接、函数依赖的判断
关系的无损链接、函数依赖的判断
1.关系的无损连接
首先什么是有损,什么是无损连接?
答:有损:不能还原无损:可以还原
无损连接分解:指将一个关系模式分解成若干个关系模式后,通过直燃链接和投影运算仍然能还原到原来的关系模式。
这里先讲判断无损连接的两种方法:
① 适用于分解为两个关系模式的运算
1.分别求出 R1∩R2 →(R1-R2)和R1∩R2 →(R2-R1);
2.然后看是否和函数依赖F有对应。若有对应,即为无损连接。
例如:
R = {A, B, C}, F={ A→B }, 则 P1 = { R1(AB), R2(AC) }、P2 = { R1(AB), R2(AC) }, 是不是无损分解?
R1∩R2 = A;
R1-R2 = B;
R2-R1 =C;
由①.1 可知:即:A→B 或 A→C
A→B和函数依赖F{ A→B } 有对应,即是无损连接。
② 表格法
直接看例子理解会好些
例如
将一个具有函数依赖: 学号→姓名,课程号→课程名,(学号,课程号)→ 分数的关系模式:成绩(学号,姓名,课程号,课程名,分数),分解为:成绩(学号,课程号,分数);学生(学号,姓名);课程(课程号,课程名)。让你判断分解是否具有无损连接性。
答:本题目关系划分为成绩、学生、课程三个关系,所以解决本题目适用于表格法。
1. 初始表格:
学号 | 姓名 | 课程号 | 课程名 | 分数 | |
成绩 | a1 | b12 | a3 | b14 | a5 |
学生 | a1 | a2 | b23 | b24 | b25 |
课程 | b31 | b32 | a3 | a4 | b35 |
表格第一行:原关系中所拥有的一系列属性。
表格第一列:拆分分解成的关系名称。
a1:由题目知道成绩(学号,课程号,分数);学号在成绩中 ,所以用a,又因为第一列 所以是a1。
b12:姓名不在拆分分解成的成绩关系中,故用b,又因为在第一行第二列,所以b12。
其它以此类推。
2. 然后根据函数依赖进行表格变化,达到最终目的。
经变换后表格:
学号 | 姓名 | 课程号 | 课程名 | 分数 | |
成绩 | a1 | a2 | a3 | a4 | a5 |
学生 | a1 | a2 | b23 | b24 | b25 |
课程 | b31 | b32 | a3 | a4 | b35 |
注:
表格变换依据规则如下:
依据函数依赖中关系→学号,表中即 a1→a2, a1→b12 ; 即可以把 b12也换成 a2。最后看能否组成一行全部是 a 的序列。若能,则分解是无损的。
本题中第一行组成了全a序列,即说明分解是无损的。
函数依赖判断 函数依赖:是数据依赖的一种,它反映属性或属性组之间相依存,互相制约的关系,即反映现实世界的约束关系。
保持函数依赖即是保持分解前后的这种约束关系。
举个简单易懂的例子。
现有关系R(A,B ,C),函数依赖F{ A→B, B→C }。
(1)分解为R1 (A,B),R2(B,C),问是否保持函数依赖?
答:R1包含有 A→B, R2包含有 B→C。包含了函数依赖F中全部依赖关系,所以保持了函数依赖 。
(2)分解为R1 (A,B),R3(A,C),问是否保持函数依赖?
答:虽然R1包含有 A→B,但是R2并没有包含出 B→C的关系约束。即分解后整个关系并没有完整包含题目中函数依赖F中的函数依赖关系。故没有保持函数依赖 。
爱 Yang
【数据库|关系的无损链接、函数依赖的判断】
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- Docker应用:容器间通信与Mariadb数据库主从复制