规范化理论--模式分解

保持函数依赖分解

将一个关系模式按函数依赖进行分解,分解后该模式的函数依赖仍然成立。

例如:

关系内不存在冗余

关系R(A,B,C)中,有A、B、C三个属性

依赖关系是:A-->B ;  B-->C;

如果划分为 R1(A,B);R2(B,C)则称之为保持函数依赖划分;

关系内存在冗余

关系R(A,B,C)中,有A、B、C三个属性

依赖关系是:A-->B ;  B-->C ; A-->C;

由A-->B ;  B-->C ;可知A-->C;所以A-->C;是关系冗余

如果划分为 R1(A,B);R2(B,C)则依然称之为保持函数依赖划分;

无损分解

有损分解:

是不能还原的,例如将一张照片压缩为jpj格式,此时放大看照片会模糊,这便是有损压缩;

无损分解:

是可以还原的,例如将文件压缩成压缩包,然后解压之后还能得到原来的文件,这便是无损分解;

无损联接分解:

将一个关系模式分解成若干个关系模式之后,通过自然联接和投影等运算仍能还原到原来的关系模式。

例:

有关系模式

成绩(学号,姓名,课程号,课程名,分数);

函数依赖:学号→姓名,课程号→课程名,(学号,课程号)→分数

若将其分解为

成绩(学号,课程号,分数)

学生(学号,姓名)

课程(课程号,课程名)

思考此分解是否为无损分解

思路:

由于关系:学号→姓名,可以将两个带有学号属性的关系进行连接

成绩(学号,课程号,分数) 联接  学生(学号,姓名)

得到  成绩(学号,课程号,分数,姓名)

由于关系:课程号→课程名,可以将两个带有课程号属性的关系进行连接

 成绩(学号,课程号,分数,姓名)联接 课程(课程号,课程名)

得到  成绩(学号,姓名,课程号,课程名,分数)即可以恢复到原来关系

方法一:列表

首行表示原有关系  成绩(学号,姓名,课程号,课程名,分数)

下面三行分别表示原有关系分成了成绩、学生、课程三个子关系

a表示在此行对应的子关系中存在该属性;b表示在此子关系中对应的属性不存在,a的下标是列号,b的下标是行号列号。

例如:成绩行中的内容表示子关系成绩(学号,课程号,分数)

根据成绩(学号,课程号,分数)关系 联接  学生(学号,姓名)关系

得到  成绩(学号,课程号,分数,姓名),如下图所示:

再根据上述成绩(学号,课程号,分数,姓名)联接 课程(课程号,课程名)

得到  成绩(学号,姓名,课程号,课程名,分数)如下图所示:

由上图可知,成绩一行已经全部为a,即代表可以恢复到原来关系,即本次分解为无损分解。 

方法二:计算

此方法十分高效但是具有很强的局限性,只能用于将一个关系一分为二,一分为三则不适用。

例题

 题目意思是,有关系R中存在三个属性A、B、C;将这三个属性分别按照ρ1,ρ2两种方法进行分解,ρ1中将其分为R1,R2两个关系R1中包含属性A、B;R2中包含属性A、C;

按照上述定理

分解方式ρ1

R1∩R2=A;R1-R2=B;R2-R1=C;

R1∩R2 → (R1-R2) = A→B(得到依赖关系A→B);

R1∩R2 → (R2-R1) = A→C(得到依赖关系A→C);

依赖关系A→B与A→C只要能有一个在题目给定得原始关系中存在过则说明是无损分解。

依赖关系A→B与A→C能够对应题目中的A→B,因此分解方式ρ1是无损分解

同理分解方式ρ2

R1∩R3=B;R1-R3=A;R3-R1=C;

R1∩R3 → (R1-R3) = B→A(得到依赖关系 B→A);

R1∩R3 → (R3-R1) = B→C(得到依赖关系B→C);

依赖关系B→A与B→C只要能有一个在题目给定得原始关系中存在过则说明是无损分解。

依赖关系B→A与B→C均无法对应题目中的A→B因此分解方法ρ2不是无损分解是有损分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值