模式分解(一)无损连接性

定义:说人话就是 把不符合模式要求的大表分解成多个小表使符合要求

特别注意:不能相互嵌套

EG:

表一

R3嵌套于R2

补充几种用到的连接

(一)等值连接

表二

比较的都是B属性 但是可以B和E进行等值连接 等值连接必须要有等值条件

(二)自然连接

​ 自然连接是特殊的等值连接,必须要有相同的属性列

(三)在进行表连接时的两种情况

​ 1.有相同属性列 进行自然连接

​ 2.没有相同属性列 进行笛卡尔积连接

表连接后的情况

​ A大表分解出B小表和C小表 BC连接等到D表

​ 1. BC连接后的D表 一定包含大表A 数据只可能多,不可能少

​ 2. D表按照 A表分解的属性,分解后,得到的仍是BC两个小表

​ 3. D表与B表或C表连接后 仍是D表

如果D表和A表完全一样(数据不多不少)才证明有无损连接性

表三

从左向右前四个表依次是ABCD表 可带入思考一下

判断无损链接的算法

第一步:构建初始表

表四

表的行数取决于大表U的元素个数

表的列数取决去分解出的小表个数

在一行中如果对应小表存在此元素填入ai(i为列标) 不存在此元素填入bij(i为行标,j为列标)

第二步:根据F中的函数依赖修改表的内容

以R1表为例 函数依赖 C->D 由于R1中有c元素,所以可以得到D元素,把表中b14改为a4

最终结果

表五

第三步:算法终止

如果有一行全为a标签 算法终止 证明有无损连接性

根据F中函数依赖扫描前后 表无变化 算法终止 且没有一行全为a标签 证明没有无损连接性