Я боролся с этим для нескольких разных приложений на протяжении многих лет. Как вы это настроите, зависит от ваших потребностей. Я работаю в сфере доступного жилья, и одна из вещей, которые нам нужно сделать, это связать различные географические компоненты (город, округ, штат и т. Д.) С различными РЕГИОНАМИ, как это определено 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 фактически имеет уникальный идентификатор, определенный в HUD (HUD CBSA_Sub), который я использую как «HUD-region_code». Также важно отметить, что регионы HUD могут включать округа в одном или нескольких штатах. Следовательно, идентификатор региона HUD связан с округом, но только косвенно с состоянием, ЧЕРЕЗ каждый Например, HUD MSA HUD "Портленд / Ванкувер / Бивертон" включает округа (и города) в штатах Орегон и Вашингтон.
В ВАШЕМ случае вам необходимо определить еще один верхний слой, tblCountry. Кроме того, вам может потребоваться немного изменить концепцию «графства» и «штата», чтобы приспособить их к другим странам («провинция» и все, что они используют для подразделений больше, чем город, но меньше, чем штат. В этом случае может работать «регион»). также - я полагаю, что многие европейские страны используют "регионы").
Страна имеет одно или несколько государств (или равнозначных). Штат имеет один или несколько округов (или равнозначных). В округе есть один или несколько городов. И города, как правило, имеют по крайней мере один почтовый индекс.
Такие области, как область HUD, в моем случае, как правило, определяются как агрегации на одном из этих уровней.
Во многих случаях за пределами этой модели, управляемой HUD, которую мне приходилось разрабатывать (часто бывает необходимо выяснить, какой HUD MSA работает по ZIP или округу. Во всех случаях небезопасно Предположим, что области HUD содержатся в определенном состоянии.
Также важно отметить, что USPS периодически меняет почтовые индексы для определенных областей.