當關係模型中的關係不是適當的正規化時,則需要分解關係。
在資料庫中,它將表分成多個表。
如果關係沒有適當的分解,則可能導致資訊丟失等問題。
分解用於消除一些不良設計的問題,如異常,不一致和冗餘。
分解的型別
範例:
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)
的一部分。