当关系模型中的关系不是适当的范式时,则需要分解关系。
在数据库中,它将表分成多个表。
如果关系没有适当的分解,则可能导致信息丢失等问题。
分解用于消除一些不良设计的问题,如异常,不一致和冗余。
分解的类型
示例:
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
,它们分别如下:
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 |
因此,分解是无损连接分解。
R
被分解为关系R1
和R2
,则R
的依赖性必须是R1
或R2
的一部分,或者必须可以从R1
和R2
的函数依赖性的组合中导出。例如,假设存在具有功能依赖性集(A -> BC
)的关系R(A,B,C,D)
。 关系R
被分解为R1(ABC)
和R2(AD)
,其是依赖性保持因为FD A-> BC
是关系R1(ABC)
的一部分。