如何设计“国家”,“省”和“城市”表?

时间:2010-12-31 09:24:58

标签: asp.net sql-server database database-design rdbms

示例1:

xTable: xTableID, CountryName, PovinceName, CityName

示例2:

Country: CountryID, CountryName
Province: ProvinceID, ProvinceName
City: CityID, CityName

问题:

  1. 您是否建议我在应用程序级别填充国家/地区,省份和城市列表,然后使用示例1设计?或者我应该在数据库级别填充它,如例2所示?

  2. 城市将根据所选省份(如果有)或国家/地区名称显示。省(如果有的话)将根据所选国家显示。省只有一个国家,城市只有一个省/国家。没有人/多对多的关系,所以我将其设计如下

  3. 注意:每个国家肯定都有一个城市,但不是每个国家都有省名。

    Country: CountryID (PK), CountryName
    Province: CountryID (PK - FK), ProvinceName
    City: CountryID (PK - FK), CityName
    

3 个答案:

答案 0 :(得分:2)

您需要从城市到国家,省与乡,城市与省之间的直接关系。 所有省份都在一个国家,因此省表需要CountryID作为FK。同样,所有城市都在一个国家,那里也是如此。 由于并非所有国家都有可称为省份的地区,因此无法将其用于从城市到国家的航行。省ID应该在City表中,但允许空值。

或者,您可以为没有省份的国家建立虚拟省份(例如省名=无省),并使用它们将城市与国家联系起来。如果有一个城市位于一个拥有省份但却不属于某个省的城市(如果这样的东西存在,可能省内就是这个城市),这也会有用。

答案 1 :(得分:0)

我已经修改并使用了它并取得了一些成功:
http://www.endswithsaurus.com/2009/07/lesson-in-address-storage.html

撰写文章的人是一位非常活跃的SO用户:
BenAlabaster

答案 2 :(得分:0)

我建议你将ProvinceId和CityId添加到表省和城市。一个省可以拥有许多城市同样一个国家可以拥有多个省份。没有必要将countryId保留在城市,省份就足够了,因为它将由省而不是国家触发。