在美国,每个可交付的邮件地址(我知道无论如何)都有邮政编码。对于适用于美国的模式,我提出了以下表格:
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_id(FK)
postal_id(FK)
这里的逻辑如下:
我想确定的是,这种结构适用于全世界的城市。我的假设是错误的,唯一重要的是城市和国家吗?我应该使用地区吗?例如,是否存在不使用邮政编码的区域,并且城市名称重复,因为城市位于不同的区域?
修改
万一重要,我使用PostgreSQL 9.3和PostGIS扩展。此外,城市表上有一个UNIQUE约束,列country_id和name(邮政表也是如此)。所以,美国只有一个波特兰;但是,这很好,因为对于美国,我将使用邮政编码。
答案 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)