5

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

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

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

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

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

4

11 回答 11

10

你有几个选择。您可以从某人那里购买一个批量邮政编码库,该库将按州列出邮政编码、城市、县等,或者您可以付费让某人访问将在更细粒度级别上执行相同功能的 Web 服务。

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

至于处理用户输入的不确定性,您可以考虑寻求地址验证 Web 服务的帮助,尽管其中大多数需要完整的送货地址才能进行验证。

编辑:看起来有一个SourceForge 项目提供免费的邮政编码数据,包括纬度/经度数据等。不确定它的正确性或最新性。

编辑 2:粗略浏览了 SourceForge 项目的网站后,看起来这是一个死项目。如果您使用此数据,则需要为数据库中不存在的邮政编码/城市提供一些余量。购买的批量库通常附带某种更新保证或更新定价计划等,并且可能更可靠。

于 2009-02-05T21:31:41.717 回答
3

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

我使用ZipInfo.com的付费服务,因为我需要额外的信息,例如纬度/经度、邮编类型和县。随着新邮政编码的添加或与其他邮政编码的合并,邮政编码每年也会发​​生数次变化,因此您需要每年更新几次数据以保持一致。

于 2009-02-05T21:37:56.087 回答
1

根据您正在构建的内容的详细信息,Yelp 有一个免费的社区 API,它可能能够为您提供所需的内容。请务必检查他们的使用条款和其他东西,以确保您遵守规定。

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

于 2009-02-05T21:38:36.883 回答
1

有许多免费的地理编码网络服务,您可以在其中从城邦获取 zip,反之亦然。看看 GeoNames 网络服务。您可以执行检查数据库之类的操作,然后如果您要查找的内容不存在,请从 Web 服务中获取并添加它。

于 2009-02-05T21:45:31.813 回答
1

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

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

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

于 2009-02-05T21:57:30.930 回答
0

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

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

于 2009-02-05T21:37:01.457 回答
0

不确定我是否理解这个问题。您是否需要允许两者之一,然后再返回两者?

即使有可以购买的邮编/城市数据库,您也必须小心,因为有些城市跨越多个邮编,因此您不能总是朝那个方向“计算”。相反方向的类似问题。

于 2009-02-05T21:38:41.330 回答
0

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

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

于 2009-02-05T21:39:53.587 回答
0

对于美国各州表,您可以使用以下查询,假设您在表中有StateId并且您有自动增量。StateNameStatesStateId

此查询有 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');
于 2016-07-28T18:47:11.047 回答
-1

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

托管在 maphacks.com

标题是 zip,city,state,latitude,longitude,timezone,dst

现在,您的潜在损失是您没有为更新付费(最终可能会咬到您,但他们会尽量保持更新)

于 2009-02-05T21:42:25.610 回答
-1

我想添加这个网站。

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

如果您用于个人/教育(截至 2014 年 3 月 20 日),您可以免费下载数据。

于 2014-03-20T21:22:49.460 回答