2013-08-06 80 views
0

假設我有一組數據。這是一些城市的一羣房子。重複字段與關係?

House 1 | 123 Fake St | Notatown 
House 2 | 456 Not Rd | Notatown 
House 3 | 789 Foo Cres| Barville 
... 

然後想象數據繼續像這樣有許多記錄。

把這個直接導入到一個表格中,每個房屋都有一個記錄,並且把城鎮全部放進去 - 或者創建一個存儲id和城鎮名字的關係表並且必須插入成多個表?即:

1 | Notatown 
2 | Barville 
... 

如果是這樣,什麼「正常形式」將做上述關係表?

+0

你可以在多個城鎮有1個房子嗎?我不這麼認爲。 –

+0

這取決於您的應用程序要求。如果還有其他實體指的是城市,將它們存儲在一張桌子上非常重要,因此您將一次更改您的城市存儲。如果你只有一個地方,你在哪裏使用城市實體,你可以直接將它放在主表 –

+0

用ID號代替文本與規範化沒有任何關係。這並不意味着你不應該這樣做。這只是意味着你不應該稱之爲規範化*。做出這種改變 - 用ID號代替文字 - 不會改變正常形式。如果您的表格在更改之前處於3NF範圍內,那麼在更改之後它將處於3NF範圍內。 –

回答

0

由於城鎮的過渡關係並沒有轉移到自己的表格中,所以直接在房屋表中的鎮名可以被認爲是第二範式(2NF)。

是否需要將此重構爲第三範式取決於您的要求。

0

這完全取決於你要用數據做什麼。

一般來說,在地址欄中存儲城鎮名稱並不是一個可怕的罪過。你是正確的,更規範化的存儲將有一個單獨的「城市」表,用鍵查找城市值。數據將要更新時,這樣的結構更爲重要。對於靜態數據(城市名稱不會變化太大),它不那麼重要。

將城鎮名稱保存在一個表格中的優點是對於可以下載地址表的人員和技術較低的用戶可讀。

將鎮名移動到另一個表的優點是一致性,可更新性和數據庫的ACID要求(原子性,一致性,隔離性和持久性)的保留。另外,如果城市名稱傾向於超過四個字符,則標準化版本可能會節省空間。 (後者在壓縮列值的柱狀數據庫上不是這樣。)

這兩個的情況下,您需要對地點的替代拼寫敏感。如果您有城鎮的主要清單,請使用它並突出顯示不匹配的值。這也假定「小鎮」對您的業務並不重要。爲客戶名稱設置單獨的表格非常重要,因爲您不希望拼寫錯誤導致超額客戶。