什么是我的City表的适当主键?

时间:2011-12-09 15:14:53

标签: database-design

我的数据库模型需要一个表City,我有两种可能的设计:

City:
    id_city   PK
    city
    country


City:
    city
    country
    PRIMARY KEY(city, country)

我想知道什么更合适。在案例1中,我可以使用不同的主键插入一个城市两次......对吗?案例二似乎更正确......不是吗?你推荐我什么?

4 个答案:

答案 0 :(得分:3)

您可以尝试使用邮政编码。想一想:美国有多少斯普林菲尔德?那只是一个国家。有一次,在西德有3个城市名叫哈恩。城市和邮政编码之间的关系是一个(城市)到多个(邮政编码)。

答案 1 :(得分:2)

在特定国家/地区中可能有多个同名城市。

例如,在美国,佛罗里达州和俄亥俄州都有名为迈阿密的城市,俄勒冈州和缅因州都有名为波特兰的城市。

答案 2 :(得分:1)

在一个国家/地区,您可以拥有多个同名城市。看here 我建议使用city_id int作为主键并将zipcode添加到列中,这样您就可以通过它进行验证。

答案 3 :(得分:1)

我建议如下:

City:
    id_city   PK
    city
    country
    UNIQUE Constraint(city, country)

为什么?

  1. 需要更多的软件控件/逻辑才能拥有字符串键 整数/数字
  2. 对整数/数字键的数据库操作更快
  3. 更多支持自动生成此类密钥(在db引擎和JPA中 例如)
  4. 如果由于一些奇怪的原因,城市名称会改变它 打破数据库的完整性。
  5. 只需2美分。