城市邮政编码和州表的最佳数据库设计

rya*_*n a 5 sql database asp.net oledb

我的申请需要参考地址。街道信息将与我的主要对象一起存储,但其余的需要单独存储以减少冗余。我应该如何存储/检索邮政编码、城市和州?以下是我的一些想法。

单表解决方案(不能做关系)

[位置] locationID locationParent(FK 表示 locationID - 0 表示州条目) locationName(城市、州) locationZIP


两个表(具有关系、FK 约束、引用完整性)

[状态] 状态 ID 状态名称

[城市] 城市ID 州ID(州.州ID 的FK) 城市名称 邮政编码


三张桌子

[状态] 状态 ID 状态名称

[city] cityID stateID(state.stateID 的外键) cityName

[zip] zipID cityID(城市.cityID 的外键)zipName


然后我阅读了邮政编码以及它们的分配方式。它们与城市没有具体关系。有些城市有多个邮政编码(好吧仍然有效),但有些邮政编码位于多个城市(哦,天哪),而其他一些邮政编码(很少)位于多个州!此外,有些 ZIP 甚至根本不处于与其所属地址相同的状态。邮政编码似乎是为了识别运输路线而设计的,一些偏远地区最好由邻近城市或州的邮局提供服务。

有谁知道一个好的(不是完美的)解决方案可以考虑到这一点,以最大限度地减少数据库增长时的差异?

Jon*_*gel 2

我不知道您是否正在国际化您的应用程序,但一般结构是这样的,与以下项目具有一对多关系:

国家
地区(州/省)
城市

这通常足以以有意义的方式过滤数据。相信我:您不想陷入地理土地划分的技术细节。

对于地址,存储上述数据加上街道地址、邮政编码(邮政编码的国际版本)等,直至达到您需要的分辨率。我说分辨率是因为您可以将地址字段拆分为公寓号、街道号、街道名称、街道方向等内容,但这些数据可能取决于位置,所以如果您打算这样做,我会避免这样做国际化您的应用程序。99.99% 的情况下,只需街道地址字段就足够了。