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

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

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

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

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

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

Ответы [ 11 ]

10 голосов
/ 06 февраля 2009

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

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

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

Редактировать: похоже, что существует проект SourceForge, предлагающий бесплатные данные почтового индекса , включая данные по широте и долготе и т. Д. Не уверен, насколько он корректен или актуален.

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

3 голосов
/ 06 февраля 2009

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

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

1 голос
/ 06 февраля 2009

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

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

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

1 голос
/ 06 февраля 2009

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

1 голос
/ 06 февраля 2009

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

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

0 голосов
/ 28 июля 2016

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

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

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

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

0 голосов
/ 06 февраля 2009

Я получил этот удар. Вот бесплатный (zip, csv):

Размещено на maphacks.com

Заголовки застежка-молния, город, штат, широта, долгота, временная зона, ДСТ

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

0 голосов
/ 06 февраля 2009

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

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

0 голосов
/ 06 февраля 2009

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

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

...