标准化地址

问题描述 投票:3回答:6

我正在尝试规范化地址。

下图显示了我认为该问题的相关表格。我想知道如何将ZipCodes集成到模型中。这将用于国际地址,因此我知道并非到处都使用Zip / PostalCode。我认为City :: ZipCode是1 :: 0-n(我读过其他人说,情​​况并非总是如此,但他们从未提供证据)。如果它们是正确的,那么我想这将是多对多的关系。由于每个地址最多只能有一个ZipCode,而一个ZipCode可以包含许多地址,我在如何规范此模型上迷失了。

由于地址可能包含或可能不包含ZipCode,因此我需要避免在地址表中将其作为可空FK。

EDIT:只是要强调提供的实体和属性是从实际DB大幅缩减的。。它仅用作参考,也解决了我对将邮政编码包含在模型中的问题的关注。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9kTlZKeC5wbmcifQ==” alt =“在此处输入图像描述”>

database database-design relational-database normalization zipcode
6个回答
6
投票

要标准化您拥有的架构;添加具有外键地址ID和邮政编码的表Address-ZipCode表;和主键地址ID-与地址表中的相同。然后通过在地址和新表之间使用左连接来包括邮政编码。仅当地址具有邮政编码时,才会填充新表。

但是,我建议您尝试容纳国际地址时,您所拥有的架构可能会不够用-您将需要多条地址线和比图表所示更多的类别级别。错过的类别包括国家/地区,次区域,城镇,可能还有其他类别。

我的回答here(非常长)显示了全面处理国际地址(和其他内容)所需的内容。除非您要与多个国家/地区的数百万个地址打交道,否则这实在太过分了。


2
投票

这些年来,我一直在为几个不同的应用程序而苦苦挣扎。如何设置取决于您的需求。我从事经济适用房的工作,我们要做的一件事情是将不同的地理区域(城市,县,州等)与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“波特兰/温哥华/比弗顿” HUD MSA包括俄勒冈州和华盛顿州的县(和城市)。

在您的情况下,您将需要再定义一个顶层tblCountry。此外,您可能需要稍微修改“县”和“州”的概念以适应其他国家(“省”以及它们用于大于城市但小于州的细分的任何国家。在这种情况下,“区域”可能有效以及-我相信许多欧洲国家都使用“区域”)。

一个国家有一个或多个国家(或同等国家)。一州有一个或多个县(或等值县)。一个县有一个或多个城市。而且城市往往至少有一个邮政编码。

在我的情况下,诸如HUD区域之类的区域往往被定义为这些级别之一上的聚集。

[在许多情况下,我不得不在HUD驱动的模型之外进行开发(通常需要确定哪个HUD MSA在ZIP或County下工作。在所有情况下,假设这一点都不安全) HUD区域包含在特定状态内。

同样要注意的是,USPS会定期更改某些区域的邮政编码。


2
投票
对于大多数需要准确,规则格式的地址的实体,

标准化或标准化地址是一个巨大的问题。 (我在地址验证行业从事SmartyStreets工作,因此我已经处理了很多。)由于不同的传递端点,地址更改,地址组成部分的更新以及许多其他事情的复杂性,最好招募经过认证的服务来为您解决这个问题。


1
投票

取决于您在邮政编码规则中所处的国家/地区,这很容易。您可以肯定地认为邮政编码具有一个正式的城市名称,但是美国和加拿大都允许使用其他城市名称作为邮政编码。我之所以知道这一点,是因为我为北美开发了邮政地址验证软件。非官方名称通常被邮政当局认可,您通常必须允许使用它们。


0
投票
邮递区号has_many个地址/地址属于邮递区号。您需要规范化吗?大多数应用程序最好在地址表中仅包含一个zip_code列。维护国际地址的所有邮政编码是一项艰巨的任务。

此外,您还要在地址和城市中复制region_id。您可能需要解释应用程序中的哪个区域,但这看起来只需要在城市中就可以了。


0
投票
全世界190个国家中有119个使用邮政编码。不使用它们的著名国家包括爱尔兰和巴拿马。[1]

除了支持这个事实之外,这将是一个非常烦人的系统,坚持拥有邮政编码。它还应允许

邮政编码未知

© www.soinside.com 2019 - 2024. All rights reserved.