解释DBMS中的连接依赖性
连接依赖性是一种约束,类似于函数依赖性或多值依赖性。当且仅当相关的关系是特定数量投影的连接时,才满足该约束。此类约束称为连接依赖性。
让我们考虑一类特殊的连接依赖性,它们有助于捕获层次数据结构中存在的数据依赖性。
示例1
上述层次结构组织说明了病房和目前住院的病人仅取决于医院,而不取决于该医院提供的设施。由于医院有多个病房,因此函数依赖性不足以描述医院与病房或设施之间的数据依赖性。
在这种情况下,多值依赖性,
医院->-> 病房 或
医院 ->-> 设施成立。
使用一阶层次分解将使我们能够以更自然的方式表示层次数据结构中存在的数据依赖性。
因此,我们可以将医院数据库存储为以下内容的无损连接 -
医院设施(医院, 设施),
医院病房(医院, 病房, 病人, 投诉, 治疗, 医生)
示例2
如果关系R等于R1、R2、…、Rn的连接,其中Ri是R的属性集的子集,则关系R满足连接依赖性。
关系R
系 | 科目 | 姓名 |
---|---|---|
计算机科学与工程 | C语言 | Ammu |
计算机科学与工程 | C语言 | Amar |
计算机科学与工程 | Java | Amar |
信息技术 | C语言 | Bhanu |
这里,
系 ->-> 科目
系->-> 姓名
上述关系处于4NF。如果主键具有三个或更多字段,则关系中的异常可能会在4NF中发生。主键是(系,科目,姓名)。有时将关系分解成两个较小的关系并不能消除冗余。在这种情况下,可以使用5NF将关系分解成三个或更多关系。
上述关系表示系提供许多选修科目,各种学生都可以选修这些科目。学生可以选择科目。因此,所有三个字段都需要表示信息。
上述关系没有显示非平凡MVD,因为属性科目和姓名是相关的;它们彼此相关(存在FD科目->姓名)。该关系不能分解成两个关系(系,科目)和(系,姓名)。
因此,关系可以分解成以下三个关系 -
R1(系,科目)
R2(系,姓名) 和
R3(科目,姓名),并且可以证明分解是无损的。
R1
系 | 科目 |
---|---|
计算机科学与工程 | C语言 |
计算机科学与工程 | Java |
信息技术 | C语言 |
R2
系 | 姓名 |
---|---|
计算机科学与工程 | Ammu |
计算机科学与工程 | Amar |
信息技术 | Bhanu |
R3
科目 | 姓名 |
---|---|
C语言 | Ammu |
C语言 | Amar |
Java | Amar |
C语言 | Bhanu |
广告