Database-Design

“城市”值得單獨使用嗎?

  • August 20, 2012

我有以下客戶表:

customer_id - int 
company_name - nvarchar
street - nvarchar
city - nvarchar
comments - nvarchar

該應用程序只能在一個小國家(大約 30 個城市)的部分地區使用。一位朋友告訴我,我應該將“城市”分成不同的“城市”表,並在客戶表中僅使用 city_id。

就我個人而言,我並沒有從中看到太多好處(除了在客戶表上節省一些空間,在這種情況下,這對我來說似乎微不足道,因為創建另一個表的成本)。

他還提到因為我有重複的列 - city: foo, city: bar, city: foo。(同一城市的客戶很少)這不被認為是正常的,這是真的嗎?

誰是對的?對這個問題有什麼啟示嗎?

設計不符合第三範式,但不僅僅是因為城市。STREET、CITY 欄位在功能上相互依賴(如果您更改城市,街道可能也會更改,反之亦然)。您還可以以不同的方式表示相同的街道、城市組合(Foo St、Foo;Foo Street、Foo;等)。

為了規範這一點,您將創建一個新表 ADDRESSES,其中包含街道、城市等,並通過地址 ID 將客戶連結到該表。如果這是您需要的,這也將允許您列出客戶的多個地址(通過連結表)。

這仍然讓您決定是否將城市提取到它自己的表中。要完全滿足 3NF,您應該創建一個城市表,您是否需要或想要取決於以下問題的答案:

  1. 您(或您是否會)擁有城市的其他屬性(例如人口、縣/州、顯示名稱等)
  2. 您是否正在執行查詢以生成可供選擇的不同城市列表(您的評論表明是)

如果第一點是真的,那麼你絕對應該創建一個 CITIES 表,否則你最終可能會得到一個擁有不同人口的城市等。如果第二點是真的,那麼最好有一個單獨的表作為要列出的查詢你所有的城市都會更好地擴展——你只需要掃描這個表而不是(幾乎可以肯定更大的)CUSTOMERS 表,然後從中獲取不同的城市。

引用自:https://dba.stackexchange.com/questions/22726