在数据库中存储国际地址的“最佳”方式是什么?

时间:2008-08-23 18:45:48

标签: database internationalization globalization street-address

将国际地址存储在数据库中的“最佳”方法是什么?以模式的形式回答,并解释为什么选择标准化(或不标准化)您的方式。还解释了为什么选择每个字段的类型和长度。

注意:您可以决定您认为必要的字段。

6 个答案:

答案 0 :(得分:25)

普通的自由格式文本。

验证所有世界的邮政编码太难了;固定的国家名单太政治敏感;强制性的州/地区/其他行政区划显然是不合适的(我经常被问到我居住的哪个县 - 当我不这样做时,因为大伦敦根本不是一个县)。

更重要的是,它根本就没有必要。您的应用程序极不可能以任何严肃的方式建模地址。如果您想要邮寄地址,请询问邮寄地址。大多数人都不是那么愚蠢到不能在邮寄地址以外的东西,如果他们这样做,他们可以亲吻他们新购买的物品。

例外情况是,如果你正在做一些自然而然地限制在一个国家的事情。在这种情况下,您应该询问,例如,{邮政编码,门牌号}对,这足以识别邮政地址。我想你可以用美国的扩展邮政编码来实现类似的东西。

答案 1 :(得分:9)

在过去,我已经在他们的网站上建立了ups / fedex送货地址表格后需要国际化的表格(我想如果他们不知道如何处理国际订单,我们都会被冲洗)。他们使用的字段可用作设置架构的参考。

答案 2 :(得分:5)

通常,您需要了解您想要地址的原因。是运送/邮寄吗?然后真的只有一个要求,让国家分开。其他行是自由形式的,由用户填写。这样做的原因是邮件的常见转发策略:转发任何外国邮件而不查看其他地址行。因此,详细信息仅由位于国家/地区的邮件分拣机解析。像接收者一样,他们会熟悉国家的惯例。

(UPS可能将一些欧洲小国聚集在一起,所有的低地国家都可能来自比利时 - 这个想法仍然存在。)

答案 3 :(得分:2)

我认为添加国家/城市和地址文字会没问题。国家和城市应分开报告。经理始终要求您提供这些您不期望的报告,我不希望通过大型数据库运行LIKE查询。

答案 4 :(得分:2)

不要过分尊重Facebook。但是,在每天发布的许多Web应用程序中,数据库的整体结构似乎被忽略了。显然,我认为没有一个完美的解决方案可以覆盖所有具有地址结构的潜在变量,而无需付出一些努力。也就是说,结合自动完成功能,Facebook设法获取位置输入数据并消除大部分冗余条目。他们通过组织好自己的数据库,以低成本,低错误的方式实时向客户端提供自动完成信息,从而允许他们或多或少地从现有列表中选择正确的位置。

我认为最好的解决方案是访问包含所需地理范围的第三方数据库,并使用它来初始化用户位置信息。这将允许您避免做创建自己的groudwork。如果幸运的话,您可以通过允许新用户直接从您的第三方供应商处接收正确的自动填充信息来减轻服务器的负担。最终,您将能够从用户输入数据中填写您自己的数据库中包含的信息,以填充大多数自动填充位置信息,例如城市,国家/地区等。

答案 5 :(得分:-3)

您需要提供有关计划如何使用数据的更多详细信息。例如,City,State,Country等字段可以是单个表中的文本,也可以是链接到带有外键的单独表的代码。

最简单的是

Address_Line_01(必填,非空白) Address_Line_02 Address_Line_03 里程碑 市(必填) 针(必填) Province_District 国家(必填) 国家(必填)

以上所有内容都可以是具有适当字段长度的文本/ Unicode。

适用的电话号码。