- 当关系模型中的关系不是适当的范式时, 则需要分解关系。
- 在数据库中, 它将表分成多个表。
- 如果该关系没有适当的分解, 则可能导致诸如信息丢失之类的问题。
- 分解用于消除不良设计的一些问题, 例如异常, 不一致和冗余。
分解类型
无损分解
- 如果信息不因分解的关系而丢失, 则分解将是无损的。
- 无损分解保证关系的连接将产生与分解时相同的关系。
- 如果所有分解的自然连接给出原始关系, 则该关系被称为无损分解。
例:
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 |
上面的关系分解成两个关系EMPLOYEE和DEPARTMENT
员工表:
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 |
部门表
DEPT_ID | EMP_ID | DEPT_NAME |
---|---|---|
827 | 22 | Sales |
438 | 33 | Marketing |
869 | 46 | Finance |
575 | 52 | Production |
678 | 60 | Testing |
现在, 当这两个关系在公共列“ EMP_ID”上联接时, 结果关系将如下所示:
员工⋈部门
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 |
因此, 分解是无损连接分解。
依存关系
- 这是数据库的重要约束。
- 在依赖性保存中, 至少一个分解表必须满足每个依赖性。
- 如果将关系R分解为关系R1和R2, 则R的依赖关系必须是R1或R2的一部分, 或者必须可以从R1和R2的功能依赖关系的组合派生而来。
- 例如, 假设存在具有功能依赖项集(A-> BC)的关系R(A, B, C, D)。关系F分解为R1(ABC)和R2(AD), 这是依赖关系, 因为FD A-> BC是关系R1(ABC)的一部分。
评论前必须登录!
注册