Почтовый индекс для города / штата и наоборот в базе данных?

StackOverflow https://stackoverflow.com/questions/518026

  •  21-08-2019
  •  | 
  •  

Вопрос

Я новичок в SQL и реляционных базах данных, и у меня есть то, что, как я полагаю, является распространенной проблемой.

Я создаю веб-сайт, и когда каждый пользователь отправляет сообщение, они должны указать местоположение либо в почтовом индексе, либо в городе / штате.

Какова наилучшая практика для решения этой проблемы?Должен ли я просто создать таблицу почтовых индексов, городов и штатов и выполнить запрос к ним или существуют готовые решения для обработки этого?

Я использую SQL Server 2005, если это имеет значение.

Мне нужно иметь возможность получить почтовый индекс по заданному городу / штату или мне нужно иметь возможность указать город-штат по заданному почтовому индексу.

Это было полезно?

Решение

У вас есть пара вариантов.Вы можете купить массовая библиотека почтовых индексов от кого-нибудь, кто перечислит почтовые индексы, города, округа и т.д.государством, или вы можете заплатить кому-то, чтобы доступ к веб-сервису который будет выполнять ту же функцию на более детализированном уровне.

Лучше всего использовать библиотеку почтовых индексов, так как это обойдется вам дешевле, чем веб-сервис, и обеспечит более высокую производительность.Как вы запрашиваете или предварительно обрабатываете эту библиотеку, зависит от вас.Вы упомянули SQL Server, поэтому вам, вероятно, понадобятся таблицы State, Zipcode и City и включите соответствующие связи между ними.Вам также потребуется предусмотреть условия для городов с несколькими почтовыми кодами или для почтовых индексов с несколькими городами, но ни одна из этих проблем не является непреодолимой.

Что касается работы с ошибками пользовательского ввода, вы можете рассмотреть возможность обращения за помощью к веб-служба проверки адреса, хотя для подтверждения большинства из них требуется полный адрес доставки.

Редактировать:похоже, что там есть Проект SourceForge, предлагающий бесплатные данные о почтовом индексе, включая данные lat / lon и т.д.Не уверен, насколько это правильно или актуально.

Правка 2:После некоторого беглого просмотра сайта этого проекта SourceForge кажется, что это мертвый проект.Если вы используете эти данные, вам нужно будет указать некоторые почтовые индексы / города, которых нет в вашей базе данных.Приобретенные массовые библиотеки обычно поставляются с какой-либо гарантией обновлений или тарифным планом на обновления и т.д. И, вероятно, более надежны.

Другие советы

Имейте таблицу почтовых индексов, которая связана с таблицей CityState.С некоторыми почтовыми индексами связано несколько городов, поэтому вам может потребоваться, чтобы интерфейс позволял пользователю выбирать нужный город или переопределять значение по умолчанию.

Я пользуюсь платной услугой от ZipInfo.com так как мне нужна была дополнительная информация, такая как широта / long, тип почтового индекса и округ.Почтовые индексы также меняются несколько раз в год по мере добавления новых почтовых индексов или объединения с другими, поэтому вам нужно будет обновлять свои данные несколько раз в год, чтобы оставаться неизменными.

В зависимости от деталей того, что вы создаете, Yelp имеет бесплатный API окрестностей это может помочь вам получить то, что вам нужно.Обязательно ознакомьтесь с их Условиями использования и прочим, чтобы убедиться, что вы их соблюдаете.

Я знаю, что это не ориентированный на БД ответ, но то, что вы делаете, возможно, не лучшим образом обрабатывается в самой базе данных.

Если причиной поиска является удобство пользователя, вот альтернативный подход, который не требует лицензирования каких-либо сторонних баз данных:

Просто найдите город / штат из вашей существующей таблицы имен / адресов, при условии, что почтовый индекс совпадает.Если кто-то ранее вводил этот почтовый индекс, то вы найдете город и штат по этой записи.ЕСЛИ предыдущей записи не существует, то в худшем случае пользователю придется вводить данные в городе и штате.

Это решение предполагает, что вам необходимо обеспечить удобство для пользователя.Если вас больше беспокоит точная проверка города, штата, почтовых индексов, то вам лучше лицензировать проверенную базу данных.

Существует множество бесплатных веб-сервисов с геокодированием, где вы можете получить почтовый индекс города-государства и наоборот.Взгляните на веб-сервис GeoNames.Вы могли бы сделать что-то вроде проверки вашей базы данных, а затем, если того, что вы ищете, там нет, возьмите это из веб-сервиса и добавьте.

Мое понимание заключается в том, что Веб-API USPS является бесплатным для использования, но требует разрешения, которое зависит от ряда факторов, включая характер программы, которая будет его использовать, и причину, по которой вам нужны данные.

Если вы имеете право использовать его, это, по-видимому, будет наиболее точным источником необходимой вам информации.

Не уверен, что понимаю вопрос.Нужно ли вам разрешить либо то, либо другое, а позже вернуть оба?

Вам придется быть осторожным, даже с базой данных zip / city, которую можно приобрести, поскольку некоторые города охватывают несколько почтовых индексов, поэтому вы не всегда можете "рассчитать" в этом направлении.Аналогичная проблема в противоположном направлении.

Существуют библиотеки, которые вы можете купить и импортировать и которые стоят не так уж дорого.Ваша проблема с ними будет заключаться в том, что у вас будут постоянные расходы на их обслуживание (не большие).Почтовые индексы постоянно меняются, а это означает, что примерно через 6 месяцев ваши данные немного устареют.Возможно, вы захотите рассмотреть возможность взаимодействия с таким сервисом, как Google maps.Здесь мы используем гибридный подход.Мы тратим сумму денег на обновление данных каждые 6 месяцев, и если почтового индекса нет в таблице, мы проверяем его с помощью Google maps, чтобы убедиться, что введенная информация все еще действительна и она просто не была введена в нашу систему.Если он действителен, мы обновляем систему, если нет, мы сообщаем пользователю, что была допущена ошибка.

Другим вариантом было бы пинговать веб-сайт USPS.Я полагаю, что у них есть страница поиска по городу / штату по почтовому индексу.

Для таблиц состояний США вы можете использовать следующий запрос, предполагая, что у вас есть StateId и StateName в States таблица, и у вас есть 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');

Я получил этот ритм.Вот бесплатный файл (заархивированный, CSV):

Размещенный на maphacks.com

Заголовки: почтовый индекс, город, штат, широта, долгота, часовой пояс, летнее время

Теперь ваша потенциальная потеря заключается в том, что вы не платите за обновления (что в конце концов может вас огорчить, но они стараются немного обновлять его).

Я хотел бы добавить этот веб-сайт.

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

Вы можете скачать данные бесплатно, если используете в личных / образовательных целях (по состоянию на 2014-03-20).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top