2013-10-06 91 views
0

假設微軟有許多CD,它需要跟蹤(包括歷史)每張CD的位置。sql server中的冗餘數據?

因此,有可能會是一個CDs表所示:

CD_ID | title | ... 
_________________________ 
    ... | ... | ... 

並表示其他表中的 「moves」:

CD_ID | dateMoved | DestinationCountryID | 
___________________________________________ 
    ... | ...  | ... 

這裏是我的問題:

如果微軟想知道cd Y目前位於:

它可以掃描moves表並獲得其最後的county

但是(在這裏是我的問題):

東西我的頭告訴我,我應該一列添加到CDs表是這樣的:

CD_ID | title | CurrentCountryID | ... 
________________________________________ 
    ... | ... |   ...  | ... 

因此,這將對每個Cd項目更具描述性。 (並且很容易找到)。

CurrentCountryID將在每次移動後更新。

這將導致redaundant數據!

因爲我們有2個地方代表它的當前位置。

我對不對?我應該添加這個列嗎?

(NB如果你要問數量:可以說,我們擁有數以百萬計的CD中)

+0

@MitchWheat是的。我已經添加了標籤。我想它是關於正常化。 (加上最佳實踐解決方案) –

+0

如果問題是「我應該正常化嗎?」答案是「是」! –

+0

@MitchWheat我的分貝確實是正常化的。我只是要求那個特定的場景!我應該添加列還是不。 (並且每次掃描 - 移動表) –

回答

2

你應該做的真的取決於你的需要。如果你要經常查看當前的國家並且表現需要良好,我會把當前的國家放在CD表格上。否則,您將不得不每次查詢移動表並獲取最大日期 - 對性能不太好。

另一方面,如果您很少需要這些信息,我會對其進行標準化並將其保留在移動表中。