街道地址的最佳归一化是什么?

问题描述 投票:4回答:4

今天我有一个包含以下内容的表:

Table a
--------
name
description
street1
street2
zipcode
city
fk_countryID

我正在讨论以最快的搜索将其标准化的最佳方法是什么。例如。查找按城市或邮政编码过滤的所有行。建议的新结构是这样的:

Table A
--------
name
description
fk_streetID
streetNumber
zipcode
fk_countryID

Table Street
--------
id
street1
street2
fk_cityID

Table City
----------
id
name

Table Country
-------------
id
name

该讨论是关于只有一个字段作为街道名称,而不是两个。我的观点是,支持国际地址被认为具有两个领域是正常的。

赞成的论点是,它将继续提高搜索和可能重复的性能成本。

我想知道去这里的最佳方法是什么。

UPDATE

我的目标是拥有与50000家商店相关的15.000个品牌,其中1.000个用户每天将通过网络和iPhone进行多次搜索。另外,我将让3.各方从数据库中为其站点获取数据。

该网站尚未启动,因此我们不了解工作量。当我们开始时,我们将只有大约1000个品牌和大约4000家商店。

[今天,我有一个包含以下内容的表:表a --------名称说明street1 street2邮政编码城市fk_countryID我正在讨论最快地标准化此方法的最佳方法是什么?]] >

我认为最重要的例子是方法,可能还有第三个自由格式的字段:

name
description
street1
street2
street3
zipcode
city
fk_countryID

您唯一可以合理地对国际地址进行中途归一化的方法就是邮政编码(不过必须是自由格式的字段)和城市。街道地址差异太大。

我的标准建议(来自多年的数据仓库/ BI经验)是:始终存储最低级别的详细信息

,即多字段选项。

除此之外,根据您的需要,您可以添加索引,或者甚至是其他两个字段串联在一起的复合字段-尽管请确保使用触发器而不是手动进行维护,否则您将出现数据同步和质量问题。正确答案部分取决于您的实际使用。您是否可以预期需要标准(两行)格式的地址才能进行邮寄...或与其他实体交换?还是这是一个真正纯粹的“只读”数据库,仅用于查询,而不用于诸如邮件之类的更标准地址需求。

一天结束时,如果您对查询性能有疑问,则可以添加其他结构,例如复合字段,索引甚至其他具有相同数据的表,但格式不同。如果性能很慢,那么还有一些选项可以在服务器级别进行缓存。如果要构建一个复杂的或流量密集的站点,那么您最终可能会获得一种无论如何都可以提供帮助的产品,例如在Ruby编程世界中,人们会使用thinking sphinx。考虑使用非SQL解决方案,例如MongoDB

我还坚持的最后一条原则:考虑人们是否会在该系统中更新数据。当人们最初输入数据然后随后去编辑该信息时,他们期望该信息是“相同的”,因此在尝试允许他们进行内部操作时,实际上会改变用户输入形式或内容的任何内部操作都将成为头疼的大问题。做一个简单的编辑。我已经看到了以这种方式编码和解码数据的极其复杂的算法,它们经常遇到问题。

请注意,高规格化意味着更多的联接,因此在每种情况下都不会产生更快的搜索。

正如其他人所提到的,当数据在一起放在一个表中,但各个部分在不同的列中时(如第一个示例),地址标准化(或“标准化”)最有效。我在地址验证字段(位于SmartyStreets处)工作,您会发现标准化地址是一项非常复杂的任务。这里有关于此任务的更多文档:https://smartystreets.com/articles/address-standardization

鉴于您将处理大量请求,强烈建议您在部署之前确保地址正确。处理您的地址列表,并删除重复项,标准化格式等。CASS认证的供应商(例如SmartyStreets,尽管还有其他公司)将提供这种服务。

mysql normalization
4个回答
1
投票

我认为最重要的例子是方法,可能还有第三个自由格式的字段:


2
投票

我的标准建议(来自多年的数据仓库/ BI经验)是:始终存储最低级别的详细信息

,即多字段选项。

1
投票

请注意,高规格化意味着更多的联接,因此在每种情况下都不会产生更快的搜索。


0
投票

正如其他人所提到的,当数据在一起放在一个表中,但各个部分在不同的列中时(如第一个示例),地址标准化(或“标准化”)最有效。我在地址验证字段(位于SmartyStreets处)工作,您会发现标准化地址是一项非常复杂的任务。这里有关于此任务的更多文档:https://smartystreets.com/articles/address-standardization

鉴于您将处理大量请求,强烈建议您在部署之前确保地址正确。处理您的地址列表,并删除重复项,标准化格式等。CASS认证的供应商(例如SmartyStreets,尽管还有其他公司)将提供这种服务。

© www.soinside.com 2019 - 2024. All rights reserved.