在SQL数据库中存储地址的最佳实践/标准

时间:2010-06-22 14:30:13

标签: mysql street-address

我想知道在数据库中存储US地址是否存在某种“标准”?这似乎是一项常见的任务,应该有某种标准。

我正在寻找的是一个特定的模式,表明数据库表应如何工作和交互,已经采用第三种常规形式,包括数据类型(MySQL)。一个好的UML文档可行。

也许我只是懒惰,但这是一项非常常见的任务,我相信有人已经发布了一种有效的方法来做到这一点。我只是不知道在哪里看,谷歌没有帮助。请指出我的资源。感谢。

修改


虽然这是一个普遍的问题,但我想澄清一下我的具体需求。

地址将用于指定事件位置的道路地址。这些地址需要采用可以最佳分解和搜索的格式,并且还可以由我最终将数据源链接到的任何第三方应用程序使用。

也。数据将在输入时进行地理编码(long,lat)并单独存储,因此它必须符合任何地理编码器/应用程序/库所做的(尚未确定的)协议。

6 个答案:

答案 0 :(得分:13)

http://www.upu.int具有国际地址的格式标准。 http://usps.com处的出版物28具有美国格式标准。

USPS希望将以下未经过切换的地址组件连接在一行:

* house number
* predirectional (N, SE, etc)
* street
* suffix (AVE, BLVD, etc)
* postdirectional (SW, E, etc)
* unit (APT, STE, etc)
* apartment/suite number

例如,102 N MAIN ST SE APT B.

如果您将整个地址行保留为数据库中的单个字段,则输入和编辑很容易,但搜索可能会更加困难(例如,在东EAST LANE是S EAST LN中的EAST街道或者是它在LAN LAN ST中的LANE?)。

如果您将地址解析为单独的字段,搜索街道名称或公寓等组件会变得更容易,但您必须将所有内容附加到输出中,您需要正确解析CASS软件,以及PO框,乡村路线地址,和APO / FPO地址有特殊的解析。

在该位置具有多个地址的物理位置是多单元建筑物,在这种情况下,诸如APT和STE之类的单元之后的字母/数字指定地址,或者它是商业邮件接收机构(例如,UPS商店)和maildrop /私人邮箱号码被追加(如100 MAIN ST STE B PMB 102),或者它是一个有USPS交付点的企业,邮件在USPS交付后被路由(这通常需要一个公司可能需要的单独的邮件停靠区域,但USPS赢了不想要地址线。

拥有多个实际地址的联系人通常是拥有街道地址和邮政信箱的公司或个人。请注意,每个地址通常都有不同的邮政编码。

通常,一个商业交易可能有送货地址和帐单地址(同样,使用不同的邮政编码)。我为每个地址保留的信息是:

* name prefix (DR, MS, etc)
* first name and initial
* last name
* name suffix (III, PHD, etc)
* mail stop
* company name
* address (one line only per Pub 28 for USA)
* city
* state/province
* ZIP/postal code
* country

我通常在人名和公司之间的某处打印邮件,因为该国家/地区包含州/ ZIP,其中包含包含公司的地址,该公司包含包含该人的邮件站。我在输入或编辑时使用CASS软件验证和标准化地址。

答案 1 :(得分:4)

首先,作为一个在那里度过大部分专业日工作地址的人,他们很难从数据角度进行管理。

如果你问5个人他们住在哪个地址;你会发现你得到了5个不同的答案。虽然你和我可以告诉 123 Main Street Apt 1 Apt 1 123 Main Street 是相同的地址,数据库程序将面临挑战。

如果您使用的是美国中心地址,几乎所有供应商提供的CASS认证软件都会合理地标准化您的地址。我建议采用以下简单格式:

  • 地址1
  • 地址2
  • 地址3
  • 国家
  • 邮编
  • Zip + 4(我会这样做,因此在检查重复项时查找更容易)

但是,如果你想要一个通用地址,我会看看IdeaAlliance的ADIS标准。该标准可用于将几乎任何国家的地址分解(解析)到相关部分。然后可以使用基于万国邮政联盟标准(UPU S42国际邮政地址组件和模板标准)的模板/组件将它们重新组合在一起。

此格式的一大优点是可以输入和存储在CASS等邮政数据库中不存在的地址。

答案 2 :(得分:2)

之前曾询问过

Very similar questions have

地址很乱 - 充其量。

这在一定程度上取决于你想要对地址做什么。如果您打算使用它们向人们发送邮件,那么您只需要以方便的形式记录将出现在地址标签上的图像。如果你要分析地址,你必须更加努力。

请记住,当您第一次与美国以外的人打交道时,之前的所有规则都会误入歧途。您可能仅限美国使用,但请注意。

答案 3 :(得分:1)

我刚才看过这个,但是对于国际地址。我没有找到共识的方式。然而,对于美国,我发现了简洁命名的美国通道,地标和邮政地址数据标准(草案)

http://www.fgdc.gov/standards/projects/FGDC-standards-projects/street-address/index_html

我不认为它们实际上提供了任何特定的数据库架构想法,但它可能是一个很好的起点。

答案 4 :(得分:1)

首先,存储地址的“最佳”方式在很大程度上取决于它的使用方式。是仅供参考或搜索说城市?你打算解决信封吗?您是否要与FedEx或UPS等运输系统集成?你会存储非美国地址吗?一旦你进入与发布的东西集成的领域,你应该开始关注CASS。这是处理USPS地址的规范。有些应用程序通过CASS认证,可以存储和验证地址。因此,第二个最好的做法是尽量避免重新发明轮子,看看是否有一个系统可以解决你的问题,特别是如果你要去国际。您希望利用这样一个事实,即其他人已经制定了有关如何正确有效地存储全球许多国家/地区的地址的所有详细信息,而不必自己进行调查。

答案 5 :(得分:1)

我之前必须尝试这样做,我发现this document会给你一些指示。我最终搁置了我的架构,因为我的应用程序必须处理国际地址。