2010-05-12 205 views
1

我們有一個情況表「A」是一個父表,並有可能是十幾桌是「A」的孩子。在每種情況下,'A'和子表之間都有1:M的關係。轉換一個1:M的關係爲1:1的關係

這是昨天決定,這些打1:M的關係應轉換爲1:1的關係。因此,對於每一個子表格,開發者在FK列上放置一個唯一的索引,該列將該錶鏈接回'A'。這是他執行1:1關係的方式。

我向他建議什麼,他也許應該做的是在每個子表中刪除的FK列在表「A」是引用的每個子表的創建FK列。他質疑這種方法,因爲對於'A'中的每一行,這些FK列中的許多列將爲空,因爲它們並不總是必需的。

這種情況下期望的方法是什麼?

謝謝 - 蘭迪

回答

2

如果我理解正確,你只能有鏈接到一個特定的行中的父表中的每個子一行。

如果是這種情況,他的方法似乎更好,因爲他提到的確切原因。最後,它很大程度上取決於您計劃如何處理數據,但從數據庫建模角度來看,最佳解決方案是在每個子表中將FK列鏈接到父表中的PK。

2

在我看來,你的同事/開發者提出了最合適的解決方案。

從數據庫設計的角度來看,通常的做法是建立在每個外鍵列的非聚集索引給定表。假設你有兩個外鍵,如你所建議的,在父表上。您將顯着增加插入操作在此表中的性能開銷。

通過將一個外鍵在每個引用父表中的12個表,你會更有效地分配你的I/O負載。