为适用于全世界城市的城市设计数据库模式

时间:2014-11-11 07:29:49

标签: database database-design

在美国,每个可交付的邮件地址(我知道无论如何)都有邮政编码。对于适用于美国的模式,我提出了以下表格:

国家

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)
LNG
LAT

邮政

postal_id(PK)
country_id(FK,NN)
名称(NN,UQ)
LNG
LAT

city_postal

city_id(FK)
postal_id(FK)

这里的逻辑如下:

  1. 每个城市都属于一个国家(例如,波特兰 - >美国)。
  2. 有些国家/地区(例如,阿拉斯加州,美国),但没有 一切都做。
  3. 地区无关紧要,因为邮政编码是唯一的 标识符(例如,97267邮政只识别一个波特兰 码)。
  4. 没有邮政编码的国家(例如爱尔兰)具有独特性 城市名称(我的假设:在爱尔兰没有两个Galways)。
  5. 我想确定的是,这种结构适用于全世界的城市。我的假设是错误的,唯一重要的是城市和国家吗?我应该使用地区吗?例如,是否存在不使用邮政编码的区域,并且城市名称重复,因为城市位于不同的区域?

    修改

    万一重要,我使用PostgreSQL 9.3和PostGIS扩展。此外,城市表上有一个UNIQUE约束,列country_id和name(邮政表也是如此)。所以,美国只有一个波特兰;但是,这很好,因为对于美国,我将使用邮政编码。

1 个答案:

答案 0 :(得分:1)

全世界的邮件地址都是FUBAR。

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

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

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

一些拉链越过州界。

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

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

我会在关于int' l地址阅读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)