我有一個DB中有4個表。正常化與否?
甲 - >乙 - 「ç - > d
現在我有事情是這樣的,A的主鍵是B. A與B的外鍵將有它自己的主鍵,這是一個用C外鍵,等等等等
然而,C不能鏈接到不B.
的問題是,我的程序的核心功能包括從A和D.
拉動匹配的條目我是否應該在D中包含A的主鍵
這樣做會造成不必要的數據重複'coz A-> B-> C-> D是層次結構。 看到D的樣子。
我有一個DB中有4個表。正常化與否?
甲 - >乙 - 「ç - > d
現在我有事情是這樣的,A的主鍵是B. A與B的外鍵將有它自己的主鍵,這是一個用C外鍵,等等等等
然而,C不能鏈接到不B.
的問題是,我的程序的核心功能包括從A和D.
拉動匹配的條目我是否應該在D中包含A的主鍵
這樣做會造成不必要的數據重複'coz A-> B-> C-> D是層次結構。 看到D的樣子。
如果你把所有的D-s與給定的A相關,我會保持它的標準化。但是如果你想要這種D-s的特定子集,並且它很容易知道哪些是預先的,但是後來耗費時間(例如,如果你想從最新的B中獲得最新C的所有D-s),我會預先存儲這個快捷方式的某個地方。它不一定在D本身(尤其是如果你不希望所有D-s與A連接)。
如果你想這樣做讓你的查詢更易於讀寫,那就考慮view。
如果您想要增加性能,請嘗試一切並測量它。 (而且我並不擅長SQL的性能調優,所以除此之外我沒有具體的建議)
如果我沒有將它存儲在D中,並將其存儲在專用於A-D關係的表中。但是,A和D實際上是通過B和C連接起來的。這對於雙重數據(關係)來說不是一種風險,並不是所有的更新都是同時進行的。 – 2011-06-18 06:07:52
它肯定會。因此它應該儘可能自動化。像物化視圖,觸發器,或者如果你更新A,B,C,D程序(而不是手動),那麼它可以在該程序更新中(在同一事務中)。其折衷。我真的很想盡量不使用它,但我希望我在一個特定的項目中使用它,我們在SQL表中有樹數據,而我們實際上只需要根的最新分支的最新分支的最新分支和讀取頻率比寫道。 – Alpedar 2011-06-21 12:45:12
謝謝!你的評論是最有幫助的 – 2011-06-21 19:22:03
這看起來不像標準化問題。 (還沒有,無論如何。)這看起來更像是一個代理鍵(id號)的問題。將所有四個表的實際結構和樣本數據作爲DDL和INSERT語句發佈,以獲得最佳答案。 – 2011-06-06 10:41:43