邮政编码到城市/州,反之亦然在数据库中?

时间:2009-02-05 21:28:17

标签: sql sql-server zipcode

我是SQL和关系数据库的新手,我有我想象的常见问题。

我正在建立一个网站,当每个用户提交帖子时,他们必须提供邮政编码或城市/州的位置。

处理此问题的最佳做法是什么?我只是创建一个邮政编码和城市和州的表格并对其进行查询,还是有现成的解决方案来处理这个问题?

如果它有所作为,我正在使用SQL Server 2005。

我需要能够检索给定城市/州的邮政编码,或者我需要能够根据邮政编码吐出城市状态。

11 个答案:

答案 0 :(得分:10)

你有几个选择。您可以从某个人那里购买bulk zip-code library,它会按州列出邮政编码,城市,县等,或者您可以向某人付access a web service,这将在更精细的级别上执行相同的功能。< / p>

您最好的选择是使用zip-code库选项,因为它会比Web服务花费更少,并且会提供更好的性能。您如何查询或预处理此库取决于您。您提到SQL Server,因此您可能需要State,Zipcode和City表,并包含它们之间的相关关系。您还需要为跨越多个邮政编码的城市或具有多个城市的邮政编码提供条款 - 但这些问题都不是不可克服的。

至于处理用户输入的琐事,您可以考虑申请address validation web service的帮助,尽管其中大多数都需要完整的送货地址才能验证。

编辑:看起来有一个SourceForge project offering free zip-code data,包括纬度/经度数据等。不确定它是多么正确或最新。

编辑2:在查看SourceForge项目的网站后,看起来这是一个死的项目。如果您使用此数据,则需要为数据库中不存在的zipcodes / cities提供一些限额。购买的批量库通常会提供某种更新保证,或更新的定价计划等,并且可能更可靠。

答案 1 :(得分:3)

拥有与CityState表相关的ZipCode表。有些邮政编码有多个与之关联的城市,因此您可能需要让界面让用户从他们想要的城市中进行选择,或让他们覆盖默认设置。

我使用来自ZipInfo.com的付费服务,因为我需要其他信息,例如lat / long,zip type和county。邮政编码也会随着新邮政编码的添加或与其他邮政编码的合并而改变几次,因此您需要每年更新一次数据以保持一致。

答案 2 :(得分:1)

根据您正在构建的内容的详细信息,Yelp有一个免费的neighborhoods API,可以帮助您获得所需内容。请务必查看他们的使用条款和内容,以确保您遵守规定。

我知道这不是以数据库为中心的答案,但您所做的事情可能无法在数据库本身中得到最佳处理。

答案 3 :(得分:1)

有许多免费的地理编码网络服务,你可以从城邦获得拉链,反之亦然。看看GeoNames网络服务。您可以执行诸如检查数据库之类的操作,然后如果您不在那里,请从Web服务中获取并添加它。

答案 4 :(得分:1)

如果查找的原因是用户的方便,这里有一种替代方法,不需要许可任何第三方数据库:

只要邮政编码匹配,只需从现有名称/地址表中查找城市/州。如果某人之前已为该邮政编码输入了一个条目,那么您将从该条目中找到该城市和州。如果不存在先前的条目,那么最坏的情况是用户必须进入城市和州。

此解决方案假设您的需求是为了方便用户。如果您更关心城市,州,邮政编码的准确验证,那么您最好许可验证数据库。

答案 5 :(得分:0)

我的理解是USPS web API可以免费使用,但需要许可,这取决于许多因素,包括将使用它的程序的性质以及您需要数据的原因。

如果您有资格使用它,这可能是您获取所需信息的最准确来源。

答案 6 :(得分:0)

不确定我理解这个问题。你是否需要允许,以后再返回?

即使使用可以购买的邮政编码/城市数据库,您也必须要小心,因为有些城市会跨越多个拉链,因此您无法始终“计算”该方向。类似的问题则相反。

答案 7 :(得分:0)

您可以购买和导入的图书馆并不昂贵。你和他们的问题在于,你将需要持续的维护成本(不是很多)。邮政编码一直在变化,这意味着在6个左右的时间内,您的数据会略微过时。您可能希望查看与Google地图等服务的接口。在这里,我们使用混合方法。我们每6个月花一笔钱来更新数据,如果邮政编码不在表格中,我们会根据谷歌地图对其进行验证,以确保输入的信息仍然有效并且尚未输入进入我们的系统。如果它是有效的,我们更新系统,如果不是,我们让用户知道错误。

另一种选择是ping USPS网站。我相信他们有一个按邮政编码查看城市/州的页面。

答案 8 :(得分:0)

对于US States Tables,您可以使用以下查询,假设StateId表中有StateNameStates,并且您有StateId自动递增。

此查询有50个美国国家......

INSERT INTO States
        ( StateName )
        VALUES
( 'Alabama'),
( 'Alaska'),
( 'Arizona'),
( 'Arkansas'),
( 'California'),
( 'Colorado'),
( 'Connecticut'),
( 'Delaware'),
( 'District of Columbia'),
( 'Florida'),
( 'Georgia'),
( 'Hawaii'),
( 'Idaho'),
( 'Illinois'),
( 'Indiana'),
( 'Iowa'),
( 'Kansas'),
( 'Kentucky'),
( 'Louisiana'),
( 'Maine'),
( 'Maryland'),
( 'Massachusetts'),
( 'Michigan'),
( 'Minnesota'),
( 'Mississippi'),
( 'Missouri'),
( 'Montana'),
( 'Nebraska'),
( 'Nevada'),
( 'New Hampshire'),
( 'New Jersey'),
( 'New Mexico'),
( 'New York'),
( 'North Carolina'),
( 'North Dakota'),
( 'Ohio'),
( 'Oklahoma'),
( 'Oregon'),
( 'Pennsylvania'),
( 'Puerto Rico'),
( 'Rhode Island'),
( 'South Carolina'),
( 'South Dakota'),
( 'Tennessee'),
( 'Texas'),
( 'Utah'),
( 'Vermont'),
( 'Virginia'),
( 'Washington'),
( 'West Virginia'),
( 'Wisconsin'),
( 'Wyoming');

答案 9 :(得分:-1)

我得到了那个节拍。这是一个免费的(zipped,csv):

Hosted At maphacks.com

标题是 拉链,城市,州,纬度,经度,时区,夏令时

现在,您的潜在损失是您不支付更新费用(最终可能会让您感到厌烦,但他们会尽量保持更新)

答案 10 :(得分:-1)

我想添加这个网站。

http://www.unitedstateszipcodes.org/zip-code-database/

如果您使用个人/教育(自2014-03-20起),您可以免费下载数据。