2011-01-13 98 views
1

我正在設計一個(關係數據庫)數據庫模式,並且想要查詢以下哪項是最合適的設計。數據庫設計問題(額外字段vs附加表格)

場景:

表ProductProperties:60場(通過字段CreatedBy外鍵引用的用戶表)

表的用戶:5個字段

該應用程序還允許用戶創建基本和高級過濾器。這些過濾器與ProductProperties表中的屬性相同。基本過濾器採用了10場,同時,先進的過濾器是由所有60

現在我可以:

1)添加三個字段表ProductProperties即FILTERNAME,IsAdvancedFilter,IsFilter(導致大量的對於這是實際的產品,但沒有過濾器)

或記錄)的空值,

2創建一個過濾器表這將導致兩個大的已經表ProductProperties的近副本ry類似的表格

哪個設計會更好?

謝謝,

+0

你如何使用ProductProperties?我們有任何產品表,它有ProductProperties的外鍵嗎? – 2011-01-13 23:13:49

+0

@Nitin是的,這是正確的。 – fjxx 2011-01-14 01:24:25

回答

1

哪種設計會更好?

那麼,不是「設計」,而是兩個建議的選擇。當然,(2)

就設計而言,具有60個字段,空值和非常大的ProductProperties未規範化。所以,如果你想要設計或數據庫,首先要做的就是使野獸正常化。

  • 現在,您正在處理標記爲「數據庫」的容器中的平面文件,並且您可以使用一些(當然不是大多數)SQL函數。

然後你會有設計。還有幾個更小的表格,這些表格更容易處理,並允許更多的關係能力。然後,當您添加過濾器時,您將根據需要添加幾個較小的表格,而不是將三列添加到單個難以使用的表格中,或者將其複製一份。

其次,並且與上述不同,我不明白爲什麼(2)Filter表會成爲產品屬性的近似副本,請您解釋一下。

1

更好的設計總是在不同的表中有不同的「事物」。如果過濾器與產品完全不同,將它們混合在一起會在處理它們時產生許多令人頭痛的問題。保持他們分開消除了這些頭痛。

至於常見列:表不是類,如果其中一些有共同的列是可以的。

最後的想法。當你添加一列時,你將不得不把它添加到另一個。這與你遇到的頭痛相比是微不足道的,因爲不同的事物由於具有相同的值而被混合到同一個表中。