关系分解

2025年8月4日 | 阅读 4 分钟

引言

在本文中,我们将通过各种示例讨论关系分解的概念及其类型。

分解(decomposition)这个词是什么意思?

  • 当关系模型中的某个关系不在合适的范式下时,就需要对该关系进行分解。
  • 在数据库中,它将表分解成多个表。
  • 如果关系没有正确的分解,可能会导致信息丢失等问题。
  • 分解用于消除糟糕设计的一些问题,如异常、不一致和冗余。

分解的类型


DBMS Relational Decomposition

无损分解

  • 如果分解后的关系中的信息没有丢失,那么这个分解就是无损的。
  • 无损分解保证了关系的连接(join)将产生与分解前相同的关系。
  • 如果关系的自然连接(natural join)等于所有分解的连接结果,则该关系称为无损分解。

示例

EMPLOYEE_DEPARTMENT 表

EMP_IDEMP_NAMEEMP_AGEEMP_CITYDEPT_IDDEPT_NAME
22牛仔布28孟买827销售
33Alina25德里438营销
46Stephan30班加罗尔869融资
52Katherine36孟买575生产
60杰克40Noida678测试

上面的关系被分解成两个关系 EMPLOYEE 和 DEPARTMENT

EMPLOYEE 表

EMP_IDEMP_NAMEEMP_AGEEMP_CITY
22牛仔布28孟买
33Alina25德里
46Stephan30班加罗尔
52Katherine36孟买
60杰克40Noida

DEPARTMENT 表

DEPT_IDEMP_IDDEPT_NAME
82722销售
43833营销
86946融资
57552生产
67860测试

现在,当这两个关系在公共列“EMP_ID”上进行连接时,结果关系将如下所示

Employee ⋈ Department

EMP_IDEMP_NAMEEMP_AGEEMP_CITYDEPT_IDDEPT_NAME
22牛仔布28孟买827销售
33Alina25德里438营销
46Stephan30班加罗尔869融资
52Katherine36孟买575生产
60杰克40Noida678测试

因此,该分解是无损连接分解。

依赖保持

  • 这是数据库的一个重要约束。
  • 在依赖保持中,至少有一个分解后的表必须满足每个依赖。
  • 如果一个关系 R 被分解为关系 R1 和 R2,那么 R 的依赖要么是 R1 或 R2 的一部分,要么可以从 R1 和 R2 的函数依赖组合中推导出来。
  • 例如,假设有一个关系 R (A, B, C, D),其函数依赖集为 (A->BC)。关系 R 被分解为 R1(ABC) 和 R2(AD),这是依赖保持的,因为 FD A->BC 是关系 R1(ABC) 的一部分。

以下是无损连接分解和有损连接分解之间的区别

序号无损连接分解有损连接分解
1.在关系模式 R 中,各种分解,如 R1、R2、R2...Rn,如果自然连接创建了原始关系 R,则称为无损。在关系模式 R 中,各种分解,如 R1、R2、R2...Rn,如果它们的自然连接导致原始关系 R 中添加了额外的元组,则称为有损。
2.在此分解中,没有信息丢失,因为自然连接分解后得到的关系等同于原始关系。在此分解中,自然连接分解后会在关系中添加额外的元组。因此,会丢失信息。
3.子关系的公共属性是其中任何一个关系的超键。子关系的公共属性不是任何子关系的超键。

关于关系分解的常见问题。

1. 检查以下分解是否为无损连接分解。

关系模式 = Student (id, Name, Class)

ID名称Class
101Anshul SharmaBCA
102Babita KumariMCA
103Chirag ThakurBCA
104Dheeraj KumarMCA
105Rahul MainiBCA

以上关系模式的两个分解如下:

Student1 (id, Name)

Student2 (Name, Class)

以下是以上表的分解。

分解 1

ID名称
101Anshul Sharma
102Babita Kumari
103Chirag Thakur
104Dheeraj Kumar
105Rahul Maini

分解 2

名称Class
Anshul SharmaBCA
Babita KumariMCA
Chirag ThakurBCA
Dheeraj KumarMCA
Rahul MainiBCA

答案: Student1 ⨝ Student2 = Student

因此,Student1 ⨝ Student2 将等于

ID名称Class
101Anshul SharmaBCA
102Babita KumariMCA
103Chirag ThakurBCA
104Dheeraj KumarMCA
105Rahul MainiBCA

因此,上述分解是无损分解,因为合并表后没有信息丢失。

2. 列出分解的各种优点?

答案: 分解的各种优点如下

  • 它有助于减少冗余。
  • 它有助于提高数据一致性。
  • 它有助于实现高效的查询处理。
  • 它有助于增强数据库组织。
  • 它有助于优化存储空间,并为数据库系统的更好维护和可扩展性做出贡献。

3. 列出关系分解的各种属性?

答案: 关系分解的各种属性如下

  • 属性保持
  • 依赖保持
  • 非加性连接属性
  • 无冗余
  • 无损连接

下一主题DBMS 多值依赖