2011-02-14 36 views
0

我相信這是一個基本的問題,但我是新來的如此反正SQL中,爲我的用戶配置文件我要顯示這樣的:位置=「好萊塢,CA - 美國」如果一位用戶住在好萊塢。所以我假設在用戶表中將會有1個像current_city這樣的列,其ID將是1232,這是城市表的FK,其中city_name爲這個PK =好萊塢。然後連接狀態表和國家表來查找名稱CA和USA,因爲城市查詢表將僅存儲ID(如CA = 21和USA = 345)顯示從ID查找表的名字 - 設計Q

這是設計表格的最佳方式或者我在想我應該添加2列像city_id和city_name到user_table。並且還將country_id,country_name,state_id,state_name添加到城市表格中。這樣我就省去了其他父表的訪問,只是爲了獲取ID的名字。

這僅僅是一個樣品的用例,但我有很多的查找ID表的,所以我會採用同樣的原則,所有的表一次,我知道如何做到最好。我的要求是可擴展性和性能,所以最適合這些的是我想要的。

回答

1

您描述的第一種方式幾乎總是更好。

既然用戶表中的city_id和city_name(或任何這種類型的對)都不是最佳做法,因爲它可能會導致數據不一致 - 錯誤的更新可能會導致city_id與city_name不匹配,然後導致系統行爲變得意外。

至於說,你的第一個建議是常見的,通常最好的方式做到這一點。如果表鍵被設計不當,因此所有select語句可以用它們有效,這也將提供最佳性能。

例如,在用戶表中只有city_name會使查找和顯示一個用戶的城市更快一些,但是當嘗試運行其他查詢時 - 例如查找城市X中的所有用戶,這會使更不用說了。

您可以在這裏找到一系列適合初學者關於數據庫標準化的文章: http://databases.about.com/od/specificproducts/a/2nf.htm。這篇文章有一個例子非常像你想什麼來實現的,而相關的文章可能會幫助你在你的數據庫設計出許多其他表。

祝你好運!