3

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

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

我应该要求 state 还是 zip?

谢谢!泽维尔

4

10 回答 10

6

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

但是你真正应该做的是让逻辑依赖于国家。查看按国家/地区划分的地址格式以获取完整列表。这也不仅仅是必填字段。这也与正确的格式有关。美国地址可能是:

8031 Main Street
Springfield OH 12345
USA

而在瑞士:

博登斯特。173
8043 苏黎世
瑞士

注意:瑞士的街道号码和邮政编码是“相反”的顺序(与英语国家使用的相比)。

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

这又回到了这个原则:如果你不对它进行算术运算,它就不是数字类型。是文字。

此外,尽量不要将其称为邮政编码给最终用户。这是美国唯一的术语。几乎在其他任何地方它都称为邮政编码、邮政编码或邮政编码。另请注意,英国邮政编码是字母数字并包含一个空格。

于 2009-09-09T03:04:56.063 回答
3

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

如果您是真正的国际化企业,新加坡等城市国家实际上并不需要 City 字段。

在用户界面中,您可以(也许应该)为您已经知道需要邮政编码的国家/地区设置所需的邮政编码,因为这不太可能改变。并且,如果您使 UI 足够动态,您可以将其命名为“邮政编码”(如果所选国家/地区是美国)、“邮政编码”(适用于加拿大)、“邮政编码”(适用于英国)等。

于 2009-09-09T03:08:36.760 回答
1

我会说除 street_line_2 和 state 之外的所有内容,并将“zip”更多地视为邮政编码而不是邮政编码 - 正如您可以从基于原产国的各种格式中看出的那样,这应该有一个非常开放的格式。

于 2009-09-09T03:03:36.713 回答
1

什么都不需要呢?如果用户想被联系,他们将输入足够的信息。或者,输入单个文本字段并让他们输入自由格式信息。他们比您更清楚邮政递送需要哪些字段才能送到他们家门口。

于 2009-09-09T03:09:15.917 回答
1

即使在美国,大部分地址也不是必需的。很大一部分美国邮政编码分配给不同的企业和组织 - 无论地址的其余部分如何,发往其中一个邮政编码的任何邮件都将相同。例如:

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

美国国税局
奥格登,犹他州 84201-0027

城市和州都不错,但没有邮件可能会送达。

于 2009-09-09T03:15:47.060 回答
1

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

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

于 2009-09-09T03:38:16.520 回答
0

如果您不打算进行任何特定的查找,例如按邮政编码或按城市搜索,我会说将所有地址组合在一个字段中。这样,您将支持来自不同国家的不同地址。

您还将支持地址异常。

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

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

于 2009-09-09T03:06:47.190 回答
0

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

于 2009-09-09T03:06:57.370 回答
0

使字段成为必填项始终是一种权衡。如果这个人不想填写信息,那么他们就不会——他们会输入一个句号或垃圾来通过“必填字段”保姆。

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

如果您包含 Ajax Web 界面,请先询问国家/地区,然后再询问邮政编码。如果在美国,则使用 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

拉里

于 2009-09-09T03:39:13.977 回答
0

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

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

出版物 28 链接

于 2010-05-21T16:40:21.623 回答