Normalization

如何確保在不失去數據的情況下拆分錶?

  • September 12, 2020

這是 wrt 數據庫規範化,當我有一個導致異常的冗餘表時,我會考慮根據 NF 規則將其拆分為較小的表。

假設我將一張大桌子分成兩部分,例如。學生和分數表我的問題是——

我怎麼知道我做了正確的拆分?

或者換一種說法,

我如何交叉檢查拆分後我是否沒有失去任何資訊,即我仍然可以在兩個表上進行連接並取回我的非規範化表?

當您擁有少量屬性時,這很容易直覺地檢查,但如果表真的很大怎麼辦。

如何確保以正確的方式拆分錶格?

當我在大學時,我的教授談到了一些等式,無論何時拆分錶都必須始終為真,以確保拆分完成時不會失去任何資訊。通過進行正確的連接,我們可以恢復大而臟的冗餘表。

正規化理論中的一個經典定理說,在兩個關係的情況下,當且僅當關係屬性的交集包含兩個關係之一的候選鍵。

這個結果可以推廣到具有任意數量關係的分解。

使用連接,嘗試準確地重建原始數據。如果您的 DBMS 支持它,我建議使用 EXCEPT:

IF EXISTS (
       SELECT * FROM A EXCEPT SELECT * FROM B
       UNION ALL
       SELECT * FROM B EXCEPT SELECT * FROM A
   ) 
   PRINT 'There is a problem'

注意:列必須匹配,在這種情況下 NULL 將等於 NULL

引用自:https://dba.stackexchange.com/questions/275409