判断关系模式分解是否为无损连接(定理或表格法)

在这里插入图片描述

方法一:无损连接定理(针对只有两个的分解)

  关系模式R(U,F)的一个分解,ρ={R1<U1, F1>, R2<U2, F2>}具有无损连接的充分必要条件是:

  U1∩U2→U1-U2 ∈F+ 或U1∩U2→U2 -U1∈F+

方法二:表格法(针对两个以上分解)

  ρ={R1<U1,F1>,R2<U2,F2>,…,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U={A1,A2,…,An},F={FD1,FD2,…,FDp},并设F是一个最小依赖集,记FDi为Xi→Alj,其步骤如下:

  ① 建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj ∈Ui,则在j列i行填上aj,否则填上bij;

  ② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中li列的元素,若其中有aj,则全部改为aj,否则全部改为bmli,m是这些行的行号最小值。

  如果在某次更改后,有一行成为:a1,a2,…,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。

  对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。

  ③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。


举例:

设关系模式R(U, F),其中:U={A, B, C, D, E}, F={A→B, DE→B, CB→E, E→A, B→D}。分解()是无损连接:
A. ρ={AC, ED, AB}
B. ρ={ABC, ED, ACE}

针对A选项,分析步骤如下:

  1. 画出二维表
A B C D E
AC A1 A3
ED A4 A5
AB A1 A2
  1. 根据关系 A→B:
A B C D E
AC A1 A2 A3
ED A4 A5
AB A1 A2
  1. 根据关系 DE→B:
A B C D E
AC A1 A3
ED A2 A4 A5
AB A1 A2
  1. 根据关系 CB→E:
A B C D E
AC A1 A3
ED A2 A4 A5
AB A1 A2
  1. 根据关系 E→A:
A B C D E
AC A1 A3
ED A1 A2 A4 A5
AB A1 A2
  1. 根据关系 B→D:
A B C D E
AC A1 A3
ED A1 A2 A4 A5
AB A1 A2 A4

最终结果是没有一行全部覆盖Ai(A1到A5),则不具有无损连接性。


针对B选项,分析步骤如下:

  1. 画出二维表
A B C D E
ABC A1 A2 A3
ED A4 A5
ACE A1 A3 A5
  1. 根据关系 A→B:
A B C D E
ABC A1 A2 A3
ED A4 A5
ACE A1 A2 A3 A5
  1. 根据关系 DE→B:
A B C D E
ABC A1 A2 A3
ED A2 A4 A5
ACE A1 A2 A3 A5
  1. 根据关系 CB→E:
A B C D E
ABC A1 A2 A3 A2
ED A2 A4 A5
ACE A1 A2 A3 A5
  1. 根据关系 E→A:
A B C D E
ABC A1 A2 A3 A2
ED A1 A2 A4 A5
ACE A1 A2 A3 A5
  1. 根据关系 B→D:
A B C D E
ABC A1 A2 A3 A4 A2
ED A1 A2 A4 A5
ACE A1 A2 A3 A4 A5

可看出第一行和第三行全部覆盖Ai(A1到A5),只要有一行能全覆盖,则具有无损连接性。


在这里插入图片描述

相关推荐

  1. 判断cursor是否

    2024-04-27 16:26:03       49 阅读
  2. python 埃氏筛判断一个数是否素数

    2024-04-27 16:26:03       41 阅读
  3. js-判断变量是否定义

    2024-04-27 16:26:03       45 阅读
  4. c# 判断是否连接公网

    2024-04-27 16:26:03       54 阅读
  5. js判断是否数字的方法

    2024-04-27 16:26:03       58 阅读
  6. ES6---判断对象是否{}

    2024-04-27 16:26:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 16:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 16:26:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 16:26:03       82 阅读
  4. Python语言-面向对象

    2024-04-27 16:26:03       91 阅读

热门阅读

  1. (数字化)采购系统建设的主要步骤是什么?

    2024-04-27 16:26:03       35 阅读
  2. [USACO18DEC] S 补题报告

    2024-04-27 16:26:03       37 阅读
  3. 阿里云oss文档预览与快照

    2024-04-27 16:26:03       36 阅读
  4. mysql 临时表 dual postgre 是否也有

    2024-04-27 16:26:03       140 阅读
  5. 若依框架学习-springboot-gateway笔记

    2024-04-27 16:26:03       41 阅读
  6. 商城数据库88张表结构完整示意图(1——15)

    2024-04-27 16:26:03       32 阅读
  7. Django框架模板位置(默认&自定义)

    2024-04-27 16:26:03       29 阅读
  8. Rust的Vec<T>

    2024-04-27 16:26:03       68 阅读
  9. 如何使用chatgpt修改代码

    2024-04-27 16:26:03       29 阅读
  10. python连接Mysql数据库

    2024-04-27 16:26:03       32 阅读
  11. elasticsearch Docker启动Device or resource busy异常

    2024-04-27 16:26:03       30 阅读
  12. 大数据组件之storm简介

    2024-04-27 16:26:03       30 阅读
  13. 2024.4.26

    2024-04-27 16:26:03       28 阅读
  14. RabbitMq总结

    2024-04-27 16:26:03       28 阅读