【问题标题】:Designing a database schema for cities that works for cities throughout the world为世界各地的城市设计一个适用于城市的数据库模式
【发布时间】:2015-01-07 16:44:21
【问题描述】:

在美国,每个可投递的邮件地址(无论如何我都知道)都有一个邮政编码。对于适用于美国的架构,我提供了以下表格:

国家

country_id (PK)
iso3166_1_alpha2
iso3166_1_alpha3
姓名 (NN,UQ)

地铁

metro_id (PK)
姓名 (NN,UQ)

城市

city_id (PK)
country_id (FK,NN)
metro_id (FK)
名称 (NN)
液化石油气
纬度

邮政

postal_id (PK)
country_id (FK, NN)
名称 (NN, UQ)
液化石油气
纬度

city_postal

city_id (FK)
postal_id (FK)

这里的逻辑如下:

  1. 每个城市都属于一个国家(例如,波特兰 -> 美国)。
  2. 有些国家有地区(例如阿拉斯加、美国),但没有 都可以。
  3. 地区无关紧要,因为邮政编码是唯一的 标识符(例如,97267 邮政仅识别一个波特兰 代码)。
  4. 没有邮政编码的国家(例如爱尔兰)具有唯一的 城市名称(我的假设:爱尔兰不存在两个戈尔韦)。

我想确定的是,这种结构适用于世界各地的城市。我认为唯一重要的是城市和国家的假设是错误的吗?我应该使用区域吗?例如,是否有地区不使用邮政编码,并且由于城市位于不同的地区而城市名称重复?

编辑

以防万一,我正在使用带有 PostGIS 扩展的 PostgreSQL 9.3。此外,city 表、country_id 列和 name 列有一个 UNIQUE 约束(邮政表也是如此)。所以,美国只有一个波特兰;不过,这很好,因为对于美国,我将使用邮政编码。

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    世界各地的邮寄地址都是 FUBAR。

    爱尔兰不使用邮政编码(都柏林以外)。

    英国是一个包含其他国家(和一个省)的国家。

    有些城市包含邮政编码,有些邮政编码包含城市。

    一些拉链跨越州界。

    各个国家/地区的邮政编码不是唯一的(“50170”出现在 10 个国家/地区)。

    有时邮寄地址不在城镇或城市(只是“调查区域”)

    我会阅读 Hay 的企业模型模式第 12 章关于国际地址的内容。

    你可以试试这样的:

    MAILING_ADDRESS
    id
    postal_code null FK POSTAL_CODES
    surveyed_area FK GEO_AREA (must be a city or surveyed area)
    suite null
    
    GEO_AREA
    id
    name
    
    COUNTRY : GEO_AREA
    
    PRIMARY_DIVISION (STATE/PROV/UK COUNTRY) : GEO AREA
    country_id FK GEO_AREA (must be a country)
    
    CITY : GEO_AREA
    primary_division_id FK GEO_AREA (must be a primary division)
    
    SURVEYED_AREA : GEO_AREA
    parent_id FK GEO_AREA (must be a primary division or city)
    

    【讨论】:

    • 我目前正在阅读您在企业模型模式中建议的章节,很明显这个问题比我的数据库架构允许的复杂得多。图 12-5 中的 UML 图会很有帮助。感谢您为我指明正确的方向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多