关于国际化:将国际地址存储在数据库中的“最佳”方法是什么?

关于国际化:将国际地址存储在数据库中的“最佳”方法是什么?

What is the “best” way to store international addresses in a database?

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

注意:您可以决定需要哪些字段。


纯格式文本。

验证世界上所有邮政编码都太难了;固定的国家清单在政治上过于敏感;强制性的州/地区/其他行政区划完全是不合适的(我经常被问到我住在哪个县,而不是,因为大伦敦根本不是一个县)。

更重要的是,这完全没有必要。您的应用程序极不可能以任何严肃的方式对地址进行建模。如果您想要一个邮政地址,请询问该邮政地址。大多数人都不会傻,除了邮寄地址外,别无他法,如果这样做,他们可以再见亲吻新购买的物品。

例外情况是,如果您执行的操作自然限制在一个国家/地区。在这种情况下,您应该要求输入{邮政编码,门牌号}对,这足以识别邮政地址。我想您可以在美国使用扩展的邮政编码来实现类似的目的。


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


通常,您需要了解为什么要地址。是否用于运输/邮寄?那么实际上只有一个要求,将国家分开。其他行是自由格式,由用户填写。原因是邮件的常见转发策略:外国的任何传入邮件都被转发而无需查看其他地址行。因此,仅由位于该国家/地区本身的邮件分拣器来解析详细信息。像接收者一样,他们会熟悉国家惯例。

(UPS可能将一些小的欧洲国家聚集在一起,例如,所有的低谷国家都可以从比利时获得服务-这个想法仍然成立。)


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

我认为最好的解决方案是访问包含您想要的地理范围的第三方数据库,并使用它最初为您的用户位置信息添加种子。这将使您避免创建自己的程序。运气好的话,您可以允许新用户直接从第三方供应商处接收正确的自动填充信息,从而减轻服务器的负载。最终,您将能够从用户输入数据中包含在您自己的数据库中的信息中,为位置信息(如城市,国家等)填充大多数自动填充功能。


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


您需要提供有关计划如何使用数据的更多详细信息。例如,诸如"城市","州","国家/地区"之类的字段可以是单个表中的文本,也可以是使用外键链接到单独表的代码。

最简单的是

Address_Line_01(必填,非空白)
Address_Line_02
地址_行_03
地标
城市(必填)
引脚(必填)
省区
州(必填)
国家(必填)

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

电话号码(如适用)。


推荐阅读