多年来,我一直在为几个不同的应用程序而苦苦挣扎。如何设置取决于您的需要。我在经济适用房工作,我们需要做的一件事是将不同的地理组成部分(城市、县、州等)与 HU(美国住房和城市发展)定义的各个地区联系起来。
我最终得到的看起来有点像这样:
tblState:
StateID
StateCode (AL, AK, AR . . . etc)
StateName (Alabama, Alaska, Arkansas, . . . etc)
tblCounty
CountyID
HUDRegionID FK to tblHUDRegion
StateID FK to tbleState
CountyName (Pierce County, WA; Lane County, OR)
NOTE: I recognize I could normalize even further and create a table of count names, many-to-many related to States ON stateID, but there's a limit, man!)
tblCity
CityID
CountyID
CityName
tblZIPCOde
ZIPCodeID
CityID
tblHUDRegion
HUDRegionID
HUDRegionCode
HUDRegionName
在我的例子中,HUD 区域是在县级定义的(一个 HUD 区域包括一个或多个县(在某些情况下或“县镇”)。每个 HUD 区域实际上都有一个唯一标识符定义为 ny HUD(HUD CBSA_Sub),我将其用作“HUD-region_code”。另外需要注意的是,HUD 区域可以包括一个或多个州的县。因此,HUD 区域标识符与县相关,但仅与州间接相关,通过每个县。对于例如,HUD“波特兰/温哥华/比弗顿”HUD MSA 包括俄勒冈州和华盛顿州的县(市)。
在您的情况下,您将需要再定义一个顶层 tblCountry。此外,您可能需要稍微调整“县”和“州”的概念以适应其他国家(“省”以及它们用于大于城市但小于州的细分的任何内容。“地区”可能适用于这种情况以及-我相信许多欧洲国家都使用“地区”)。
一个国家有一个或多个国家(或同等国家)。一个州有一个或多个县(或等效县)。一个县有一个或多个城市。城市往往至少有一个邮政编码。
在我的例子中,诸如 HUD 区域之类的区域往往被定义为这些级别之一的聚合。
在许多情况下,在这个 HUD 驱动模型之外,我必须开发(通常需要通过 ZIP 或县确定哪个 HUD MSA 正在工作。在所有情况下,假设 HUD 是不安全的区域包含在一个特定的状态中。
另外需要注意的是,USPS 会定期更改某些地区的邮政编码。