2013-01-21 51 views
0

我使用的是sql-server-2008-R2。我有一個表中有三種類型的數據,並且類型在另一個表中。數據庫表分析混淆

T =表,F =場,FK =外鍵,PK =主鍵

T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7 

T2: F1(TypeID, PK), F2(TypeName) 

我想添加一個第四類這種類型還有一個附加屬性(如TypeRate) 。
我的T1表格在項目開始的第一週至少有300萬條記錄,然後它會減慢每月300萬條記錄的速度。

現在我想知道哪種方法如下列出的中最好的一個:

A.一個字段添加到主表(T1)

T1: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8(TypeRate) 

F8大部分時間(對於其他類型的記錄)將爲空,但我只有一個表格


B.在所有添加另一個表與所有的T1具有字段(T3)

T3: F1(PK), F2(TypeID), F3, F4, F5, F6, F7, F8 

使T1沒有一個空值的大部分時間,但我有兩個表,其大多是相似的。


C.添加描述表(T4)

T4: F1(PK), F2(FK:T1.PK), F3(TypeRate) 

使我的T1表不具有空值,和用於所述第四類型的附加數據是按照所述記錄T4(描述表)

+0

請註明爲什麼每個解決方案是好還是壞的,有什麼缺點和優點。 –

回答

1

你不能要求「最好」的解決方案,而不需要描述你正在努力完成的任務。那麼,我想你可以問,但這使得問題無法回答。

如果您試圖最小化空間(內存和磁盤空間),然後將表分成兩部分 - 如選項(b)所示 - 將是最小空間解決方案。但是,您選擇此選項的可能性非常小。空間效率的提高是最小的,將一個實體分成兩個表通常不是最好的解決方案。

對於每個NULL,第一種解決方案每行會產生大量的開銷 - 這是一個相當微不足道的空間。這在許多情況下似乎是一個很好的解決方案。數據不需要額外的連接即可使用。

第三種解決方案也很好。它需要額外的連接才能獲取數據。但是,如果參考表很小或者如果您在密鑰上構建索引,則性能開銷應該可以忽略不計。

還有另一種解決方案,我會打電話給(d)。這是另一個表具有與第一個表一樣的主鍵以及附加列。當存在多個形成自然分組的不同列時,這會很有用。

總之,作爲一般規則,我會去(c)。它以最小的性能影響維護數據庫的關係完整性。在某些情況下,我會選擇(a)或(d),但這取決於問題和被認爲是「最好的」。

+0

謝謝戈登,我把你的問題提出來了。你的回答很方便,祝你好運。 –