我是一名程序员,老实说,我不了解世界上的街道地址结构,而在我的国家/地区却是如此:)那么,哪种存储街道地址的最佳且通用的数据库设计是什么?它应该是如此简单易用,快速查询和动态存储该标识只是一个ID世界所有街道地址
非常感谢
我是一名程序员,老实说,我不了解世界上的街道地址结构,而在我的国家/地区却是如此:)那么,哪种存储街道地址的最佳且通用的数据库设计是什么?它应该是如此简单易用,快速查询和动态存储该标识只是一个ID世界所有街道地址
非常感谢
Answers:
可以在一组标准字段中代表来自许多不同国家的地址。除了在中国以外,命名或编号建筑物所在的命名通道(通行费)的基本思想是相当标准的。其他近乎通用的概念包括:给定居点(城市/城镇/村庄)命名,通常可以将其命名为位置;命名区域并分配字母数字邮政编码。请注意,邮政编码(也称为邮政编码)仅在某些国家/地区是纯数字的。如果您真的想通用,则需要很多字段。
万国邮联万国邮政联盟以标准格式提供许多国家的地址数据。请注意,UPU格式包含整个国家/地区的所有地址(低至可用字段精度),因此是关系型的。如果要存储客户地址(仅存储所有可能地址的一小部分),则最好使用包含所有字段和每行一个地址的单个表(或纯格式)。
存储地址的合理格式如下:
地址线1-4可以容纳以下组件:
通常只使用3条地址线,但这通常不足。当然,可能需要更多行以正式格式表示所有地址,但是逗号始终可以用作行分隔符,这意味着仍可以捕获信息。
通常,数据分析将按地区,地区,邮政编码和国家/地区进行,用户输入数据时这些元素相当容易理解。这就是为什么这些元素应存储为单独的字段的原因。但是,请勿强迫用户提供邮政编码或地区,否则可能无法在本地使用。
位置可能不清楚,尤其是地图位置和邮政位置之间的区别。邮政所在地是邮政当局认为的地方,有时可能是附近的大城镇。但是,邮政编码通常可以解决那里的任何问题或差异,即使不使用官方的邮政所在地,也可以正确交付。
看看数据库答案。具体来说,这涵盖了许多情况:
(所有可变长度字符数据类型)
AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails
问问自己,存储此数据的主要目的是什么?您是否打算将邮件实际发送给该地址的人?追踪人口统计资料,人口?在一些基本的身份验证/验证过程中,能否要求呼叫者提供正确的地址?上述所有的?以上都不是?
根据您的实际需求,您将确定a)并不重要,可以采用自由文本方法,或者b)所有国家/地区的结构化/特定字段,或c)国家/地区特定的体系结构。
也许这很有用:https : //gist.github.com/259744 对于一个项目,我收集了有关世界所有国家的信息表,包括ISO代码,顶级域名,电话代码,汽车标志,长度和正则表达式压缩。不幸的是,国家/地区名称和注释仅使用德语...
不,绝对不是。如果比较美国和日本地址的工作方式,您会发现这是不可能的。
更新:
再三考虑,任何事情都可以做,但是需要权衡取舍。
一种方法是使用address和address_attribute表对它们进行建模,它们之间的比例为1:m,任何东西都可以建模。address_attribute表将包含一个pk,一个名称,一个值和一个指向其地址父级pk的fk。这几乎就像使用带有名称,值对的Map。
权衡是每次您要地址时都必须进行JOIN。您还必须询问address_attributes的名称,以弄清楚每次要处理的内容。
另一种方法是对世界各地的地址建模进行更全面的研究。在面向对象的世界中,对于日本,中国,您可能拥有西方的Address类(street1 / street2 / city / state / zip)和其他Address类,并且需要平铺地址空间的类。然后,您将拥有一个主地址表和其他类型的子表,它们之间具有1:1的关系。
亚马逊或eBay如何做到这一点?他们运送国际。他们是否具有特定于语言环境的UI功能?我只使用了美国语言环境。
不,没有标准的寻址方案。它通常因国家而异。甚至万国邮政联盟也曾在“ 改善世界”上说过,对所有人来说都没有。最好的解决方案是使用2/3字母的国家/地区代码标准(称为ISO 3166),并按该国家/地区的标准对待其他所有内容。
但是,如果您真的想为项目使用易于访问的工具,则可以尝试使用Google Place API。
您的设计应严格取决于您的目的。有人发布了如何构造数据。因此,如果您只想发送电子邮件给某人,它就可以。如果要使用此数据进行导航,事情将变得复杂。汽车导航将需要其他结构来包含交通信息(例如,单向道路),而步行导航将需要大量其他数据。这是一个小例子:在我的城市,我的邻居在公园附近。公园旁边是昔日的飞机场(实际上是欧洲最古老的飞机场之一),后来变成了航空博物馆。航空博物馆旁边是商业园。博物馆的街道号码是39,而商业园区的号码是39A开头的。因此,看起来39和39A距离很近-但从另一个到另一个走大约要走一英里(如果要开车,走走甚至会更长)。
这只是我所在城市的一个小例子,我想您可能会发现很多例外情况(尤其是在每个国家的农村或荒野地区)。