2011-07-25 224 views
3

國家:countryID,國家名稱
地區:regionID,countryID(FK),regionName
市:cityID,regionID(FK)的cityName國家/地區/城市數據模型

  1. 所有國家都會有城市。
  2. 不是所有的國家都會有地區。區域將只攜帶 具有countryID的行。只有一行的區域ID爲9999且countryID爲NULL regionName爲NONE。
  3. 任何城市都沒有regionID,它將被引用到9999 regionID。

前端情景: - 僅市屬地區

  1. 用戶從下拉列表
  2. 地區下拉被填充
  3. 市下拉被填充選取一個國家

我可以在我的設計中看到一個錯誤,它只對有區域的國家有效。 如果國家沒有地區,那麼只需填寫城市列表並忽略地區列表。

我可以把countryID和regionID放在City表中。不過,我需要你的建議。

從長遠來看最穩定的最佳解決方案/設計是什麼?

回答

3

如果:

所有國家都會有城市。

和:

並非所有國家都會有地區。

則:

只是把countryID和regionID市臺

內是模擬它最明顯的方式。正如你所建議的那樣,這不是一個分層模型。有3個獨立的關係:

  • 市中區
  • 市國家
  • 地區在國家

因此,你需要明確地捕捉它們。但是你需要邏輯,以確保一致性,即防止如情況:

  • '伯明翰(市)在「西米德蘭」(地區)
  • 「伯明翰」是在「英國」 (國家)
  • '西米德蘭茲'在'法國'(國家)。

另一種辦法是捕捉國家和地區,在同一個表,讓我們把它叫做Area

AreaID  Name    Type ParentID 
001 'UnitedKingdom' 'Country' NULL 
002 'West Midlands' 'Region' 001 

這樣做會刪除上面的問題。每個城市都有一個強制FK到Area表,指向適當的'國家'或'地區'條目。它還允許層次結構更靈活;例如可以在區域內添加區域(如有必要),和/或添加其他類型的區域(例如Continent)。但是,您仍然需要強制執行某些邏輯(例如,不能添加區域作爲國家/地區的父級)。

兩種解決方案都可以工作;這最好取決於其他要求(例如寫入次數與讀取次數)。

hth。

0

爲什麼不能在城裏表countryID以及所以你可以映射回無論是國家或地區根據您的需要的時候

+0

似乎很好的解決方案,一見鍾情。我怎麼知道哪個城市屬於哪個地區? – user311509

+0

您將regionId和countryID與城市 – plague

+0

一起存儲,或者您可以創建城市到區域表和城市到國家表 – plague

0

好吧,如果你把regionID在你的城市表,如果你沒有區域,它也會在你的城市表中爲空。所以沒有任何好處。

您在詢問一個0對多的關係,它是一種特殊形式的一對多關係,您允許區域零件爲NULL。如果將來你的國家'X'有區域,你以前的設計從長遠來看是可行的。

+0

這是可行的,但是如何在城市與國家之間沒有區域鏈接的情況下將城市與國家相關聯。 – user311509

+0

由於我偏向於擁有3個表格,作爲解決方法,您可以使用像「DEFAULT」這樣的地區名稱,並將所有城市放在該國家沒有地區的地方。 – Shahriar

0

這裏有兩個不同的問題。

  • 數據庫設計問題(如何城市地名模型)
  • 的使用者界面設計問題(用戶應該是如何進入城市名)

雖然這兩個問題互動一些,他們真的彼此沒有太大關係。

對於數據庫設計問題,舊金山的「全名」是

San Francisco, California, United States of America 

也就是說,比如說,從San Francisco, Alabama, United States of America,它甚至不存在的區別。

,往前一步,加利福尼亞州的全名是

California, United States of America 

也就是說,比如說,從California, Scotland,這同樣是不存在的區別。

這是否意味着對您有用的方法?