应该要求地址的哪些部分?

时间:2009-09-09 02:58:55

标签: sql street-address

假设我将地址存储在数据库表中,在这个相当常见的细分中:

address_street_line_1,
address_street_line_2,
address_city,
address_state,
address_zip,
address_country_id

(注意:我已经阅读了有关进一步拆分,街道类型,门牌号等的问题,对于这个应用程序,我认为这会使事情变得更加复杂。)

为了与国际用户一起使用,不应该要求哪些字段?

我在想这个:

address_street_line_1 REQUIRED
address_city REQUIRED
address_country_id REQUIRED

我应该要求州或邮政吗?

谢谢! 泽维尔

10 个答案:

答案 0 :(得分:6)

您可能只需要一个字段:country。

但你应该做的是让逻辑依赖于国家。请查看Address Formats by Country以获取完整列表。这不仅仅是必需的字段。这也是关于正确格式化。美国地址可能是:

8031 Main Street
斯普林菲尔德OH 12345
USA

而在瑞士:

Bodenstr。 173个
8043Zürich
瑞士

注意:瑞士的街道号码和邮政编码按“反向”顺序排列(与英语国家/地区使用的相比)。

此外,您的数据类型必须足够广泛,以涵盖其他国家/地区使用的数据。邮编/邮政编码绝对应该是数字类型。例如,“EC2R 8AH”是有效的英国邮政编码。

这可以追溯到这个原则:如果你不对它进行算术运算,它就不是数字类型。这是文字。

另外,尽量不要将邮政编码称为最终用户。那是美国唯一的一个词。几乎所有其他地方都称其为邮政编码,邮政编码或邮政编码。另请注意,英国邮政编码是字母数字,包括空格。

答案 1 :(得分:2)

并非所有国家/地区都使用邮政编码,例如在2006年之前新西兰很少使用这些邮政编码。我认为爱尔兰根本不使用它们。

如果你真的是国际性的,像新加坡这样的城市国家实际上并不需要城市领域。

在用户界面中,您可以(也许应该)为您已经知道需要的国家/地区制作所需的邮政编码,因为这不太可能发生变化。而且,如果您使用户界面足够动态,如果所选国家/地区为美国,则可将其称为“邮政编码”,加拿大为“邮政编码”,英国为“邮政编码”等。

答案 2 :(得分:1)

我会说除了street_line_2和州之外的所有内容,并认为'zip'更像是postal codes而不是邮政编码 - 正如你可以从基于原产国的各种格式看出来的,这应该是有一个非常开放的格式。

答案 3 :(得分:1)

如何不需要?如果想要联系用户,他们将输入足够的信息。或者,输入单个文本字段并让他们输入自由格式信息。他们比你更了解邮政送货所需要的哪些领域。

答案 4 :(得分:1)

即使在美国,也不需要大部分地址。美国邮政编码的很大一部分被分配给各种企业和组织 - 无论地址的其余部分如何,任何邮件都将被发送到同一个拉链中。例如:

通用电气
斯克内克塔迪,纽约州12345

国内税务局
奥格登,UT 84201-0027

城市和州都很好,但邮件可能会在没有邮件的情况下发送。

答案 5 :(得分:1)

我找到解决此问题的最佳方法是抽象应用程序层中的逻辑,而不是持久层。我见过这种最干净/最简单的方法之一是将用户的数据传递给一个值对象(创建一个易于验证的通用接口)到一个带有当前国家代码的验证器,这样可以确保所有必需的属性在该区域设置的值对象中正确设置。假设它通过验证,将值对象传递给应用程序的持久性端进行存储。

这里的关键是值对象 - 您正在创建一个通用接口,您的应用程序的多个部分可以与之通信,验证和读取/写入。然后,您还可以在显示地址时使用相同的值对象:让持久层获取信息,将其放入值对象,将其传递给具有返回所需地址格式的当前区域设置的工厂,并将该输出发送到前端。

答案 6 :(得分:0)

如果您不打算进行任何特定查询,例如通过邮政编码或城市搜索,我会说所有人都将地址合并到一个字段中。这样您就可以支持来自不同国家/地区的不同地址。

你也会支持地址奇怪。

如果您担心要求会发生变化,您可以将地址存储为Xml字段。像Sql Server 2005和2008这样的现代数据库只要您使用模式,就可以在Xml列内的Xml节点上拥有索引。

这一切都归结为要求。如果客户需要按国家/地区对网格内的数据进行分组,则需要一个国家/地区列。

答案 7 :(得分:0)

新西兰没有州,所以它绝对应该是可选的。所以我认为你的问题得到了正确答案。

答案 8 :(得分:0)

制作所需的字段始终是一种权衡。如果这个人不想填写信息那么他们就不会 - 他们会投入一段时间,或者垃圾来过“必填字段”保姆。

我的应用中只需要street_address_1。此外,对于美国和许多国家/地区,您可以购买邮政/邮政编码与规范城市/州之间的映射。它不贵。 (各个街道地址和邮政编码之间的映射要贵得多。) 对于美国,请参阅http://www.usps.com/ncsc/addressinfo/citystate.htm

如果您要包含Ajax网络界面,请首先询问国家/地区,然后是邮政编码。如果在美国,则使用Ajax从zip中获取并填写用户的城市/州。

如果您要求人们填写“首选地址”,某些非美国国家(例如英国)可以拥有3行街道地址,例如:

Mirassou          (You can register a building's name with the post office
High Street        as an alternative to its street number)
Old Town
City, Bucks postal_code

拉​​里

答案 9 :(得分:0)

实际上,美国甚至不需要城市。

许多人在州和县道路上都有农村地址。邮政服务网站上的出版物28有详细信息。不同的公司最终使用“城市”字段来存储其他信息。这也适用于军事基地址。

Publication 28 link