我是一名程序员,说实话,我不知道世界上的街道地址结构,也不知道我的国家是如何结构的:) 那么哪种是存储街道地址的最佳和常见的数据库设计?它应该使用简单,查询快速,动态存储世界上所有街道地址,只需一个 ID 即可识别
多谢

有帮助吗?

解决方案

可以在一组标准字段中表示来自许多不同国家/地区的地址。命名或编号建筑物所在的命名通道(通道)的基本概念是相当标准的,但有时在中国除外。其他近乎普遍的概念包括:命名定居点(城市/城镇/村庄),可统称为地点;命名区域并分配字母数字邮政编码。请注意,邮政编码(也称为邮政编码)仅在某些国家/地区为纯数字。如果你真的想通用,你将需要很多字段。

万国邮联万国邮政联盟提供许多国家的地址数据 标准格式. 。请注意,UPU 格式保存整个国家/地区的所有地址(精确到可用字段精度),因此它是相关的。如果存储客户地址(仅存储所有可能地址的一小部分),最好使用包含所有字段和每行一个地址的单个表(或平面格式)。

存储地址的合理格式如下:

  • 地址行 1-4
  • 地点
  • 地区
  • 邮政编码(或邮政编码)
  • 国家

地址线 1-4 可容纳以下组件:

  • 建筑
  • 副楼
  • 房屋号码(门牌号)
  • 前提范围
  • 通道
  • 次干道
  • 双重依赖局部性
  • 次区域

通常只使用 3 条地址线,但这通常是不够的。当然,可能需要更多行来表示正式格式中的所有地址,但逗号始终可以用作行分隔符,这意味着仍然可以捕获信息。

通常,数据分析会按地点、地区、邮政编码和国家/地区进行,这些元素对于用户在输入数据时相当容易理解。这就是为什么这些元素应该存储为单独的字段。但是,不要强迫用户提供邮政编码或区域,它们可能不会在本地使用。

地点可能不清楚,特别是地图地点和邮政地点之间的区别。邮政地点是邮政当局认定的邮政地点,有时可能是附近的一个大城市。然而,邮政编码通常会解决那里的任何问题或差异,以便即使不使用官方邮政地点也能正确投递。

其他提示

看一看数据库答案的。具体而言,这包括许多情况下:

(所有可变长度字符数据类型)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

“在这里输入的图像描述”

问问自己,什么是主要的目标存储这些数据的?你打算在实际的地址发送邮件的人?追踪人口统计,人口?可以请求他们正确的地址呼叫者一些基本的身份验证/验证的一部分?上述所有的?以上皆非?

根据您的实际需要,你将决定无论是)它其实并不重要,你可以去一个自由文本的方法,或对所有国家二)结构/特定字段,或c)国家的具体架构

有时你可以得到一个街道地址最接近的是城市。

我曾经有过一个项目,把在印度的所有中学在谷歌地图。我写了使用谷歌API一个绝妙的计划,并认为这将是很容易的。

然后,我得到来自客户端的数据。一些学校的地址是像“华灯初上的市场,旁边的理发店”或“靠近旧巴士站”。

这使我的工作更难,因为,不幸的是,谷歌API不支持该格式。

对于国际地址,如果信息被分解为多个字段,则很难找到一种格式化信息的方法。例如,意大利地址使用:

<street address>
<zip> <town> <region>
<country>

例如

Via Eroi della Repubblica
89861 Tropea VV
Italy

这与第二行的美国地址顺序有很大不同。

另请参阅SO问题:

另请检查标签 '邮政编码'.


编辑: :地区和城镇的逆序 - 每 万国邮联

也许这是有用的: https://gist.github.com/259744 对于一个项目,我收集了世界上所有的国家,包括ISO代码顶级域名,电话代码,汽车标志,长度和拉链的正则表达式的信息表。 遗憾的是只在德国国家名称和注释...

取决于你是如何的自由形式准备去的领域。一个自由形式的地址栏会明显总是这样做,但要相对小的帮助缩小地域。

你的问题是,有在不同国家地域层次的水平太多的变化。哎呀,有些国家甚至没有“街道地址”无处不在。

我建议你不要试图使它太聪明了。

与这里的其他答案不同,我相信有可能拥有一个结构化的地址数据库。

凭空想象,我可以想到以下结构:

  • 国家
  • 地区(州/省)
  • 地区(市/直辖市)
  • 次地区(县/地区的其他分区)
  • 街道

但如何足够快地查询呢?

我一直认为可以实现这一目标的一种方法是询问邮政编码(或邮政编码),该邮政编码因国家/地区而异,但在该国/地区内是固定的。

通过这种方式,您可以围绕世界各地邮局提供的信息构建数据。

通用数据模型名声建议GEOGRAPHIC BOUNDARIES并且取决于对多少自由一个单独的层次结构伦·锡尔弗斯顿形成岬您愿意接受任一简单STREET ADDRESS LINEs或按国家的衍生物。

没有,绝对不是。如果你比较的方式美国和日本地址的工作,你会看到这是不可能的。

更新:

在第二个想法,什么都可以做,但有一个权衡。

一种方法是该问题与地址和address_attribute表建模,以1:它们之间的关系米,什么都可以被建模。该address_attribute表将有一个PK,一个名称,一个值,回指向其地址母公司PK的FK。这几乎就像使用地图与名称,值对。

在权衡是不得不做一个JOIN你想要一个地址每次。您也可以询问address_attributes的名字弄清楚你处理了每个时间。

另一种方法是做上的地址是如何在世界各地的建模较为全面的研究。在面向对象的世界需要瓷砖的地址空间,你可能有西方Address类(street1 / STREET2 /城市/州/邮编)等人对日本,中国,正如许多。然后你就会有一个主地址表和子表到其他类型的以1:它们之间的关系1

如何亚马逊或易趣做呢?他们船国际。他们有特定的语言环境的UI功能?我只用美国的语言环境。

没有,没有标准寻址方案。它通常从一个国家到国家而异。 即使在万国邮政联盟说Adressing世界,地址为大家的存在是没有的。该最佳的解决方案是使用称为 ISO 3166 中的三分之二字母的国家代码标准并通过国家标准对待一切。

但是,如果你真的是不顾一切地用简单的工具,为你的项目,你可以尝试谷歌广场API

您的设计应该在很大程度上取决于从你的目的。有人贴出如何组织数据。所以,如果你只是想送邮件发送给他人,它会做。事情开始变得复杂,如果你想利用这些数据进行导航。汽车导航将需要额外的结构,包含交通信息(例如单向通行的道路),而足导航将需要大量的额外数据。下面是小例子:在我的城市,我的邻居是附近的公园。旁边的公园前机场(事实上,在欧洲最古老的一个)变成了航空博物馆。下一步航空博物馆是一个商业园区。对于博物馆的街道号码是39,而创业园数量与39A开始。所以它可能看起来39和39A接近 - 但它需要大约一英里,从一个到另一个(如果开车去甚至更长)走路结果。 这只是从我的城市采取了一个小例子,我想你也许可以找到很多例外情况(特别是在每一个国家的农村或狂野的部分)的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top