当前位置: 首页 > 教程 > 数据库管理系统 >

DBMS关系分解

精华
小牛编辑
197浏览
2023-03-14

当关系模型中的关系不是适当的范式时,则需要分解关系。
在数据库中,它将表分成多个表。
如果关系没有适当的分解,则可能导致信息丢失等问题。
分解用于消除一些不良设计的问题,如异常,不一致和冗余。

分解的类型

1. 无损分解

  • 如果信息没有从分解的关系中丢失,那么分解将是无损的。
  • 无损分解保证了关系的连接将产生与分解时相同的关系。
  • 如果所有分解的自然连接给出原始关系,则该关系被称为无损分解。

示例:

EMPLOYEE_DEPARTMENT 表的结构和数据如下:

EMP_ID EMP_NAME EMP_AGE EMP_CITY DEPT_ID DEPT_NAME
22 Denim 28 Mumbai 827 Sales
33 Alina 25 Delhi 438 Marketing
46 Stephan 30 Bangalore 869 Finance
52 Katherine 36 Mumbai 575 Production
60 Jack 40 Noida 678 Testing

将上述关系分解为两个关系表:EMPLOYEEDEPARTMENT,它们分别如下:

EMPLOYEE 表结构和数据如下 -

EMP_ID EMP_NAME EMP_AGE EMP_CITY
22 Denim 28 Mumbai
33 Alina 25 Delhi
46 Stephan 30 Bangalore
52 Katherine 36 Mumbai
60 Jack 40 Noida

DEPARTMENT 表结构和数据如下 -

DEPT_ID EMP_ID DEPT_NAME
827 22 Sales
438 33 Marketing
869 46 Finance
575 52 Production
678 60 Testing

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

Employee ⋈ Department 连接操作 -

EMP_ID EMP_NAME EMP_AGE EMP_CITY DEPT_ID DEPT_NAME
22 Denim 28 Mumbai 827 Sales
33 Alina 25 Delhi 438 Marketing
46 Stephan 30 Bangalore 869 Finance
52 Katherine 36 Mumbai 575 Production
60 Jack 40 Noida 678 Testing

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

2. 依赖保留

  • 它是数据库的一个重要约束。
  • 在依赖项保留中,至少一个分解的表必须满足每个依赖项。
  • 如果关系R被分解为关系R1R2,则R的依赖性必须是R1R2的一部分,或者必须可以从R1R2的函数依赖性的组合中导出。

例如,假设存在具有功能依赖性集(A -> BC)的关系R(A,B,C,D)。 关系R被分解为R1(ABC)R2(AD),其是依赖性保持因为FD A-> BC是关系R1(ABC)的一部分。