當關係模型中的關係不是適當的範式時,則需要分解關係。
在資料庫中,它將表分成多個表。
如果關係沒有適當的分解,則可能導致資訊丟失等問題。
分解用於消除一些不良設計的問題,如異常,不一致和冗餘。
分解的類型
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 |
將上述關係分解為兩個關係表: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 |
因此,分解是無損連接分解。
2. 依賴保留
- 它是資料庫的一個重要約束。
- 在依賴項保留中,至少一個分解的表必須滿足每個依賴項。
- 如果關係
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)
的一部分。
上一篇:
DBMS第五範式(5NF)
下一篇:
DBMS多值依賴