Почтовый индекс для города / штата и наоборот в базе данных?
-
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):
Заголовки: почтовый индекс, город, штат, широта, долгота, часовой пояс, летнее время
Теперь ваша потенциальная потеря заключается в том, что вы не платите за обновления (что в конце концов может вас огорчить, но они стараются немного обновлять его).
Я хотел бы добавить этот веб-сайт.
http://www.unitedstateszipcodes.org/zip-code-database/
Вы можете скачать данные бесплатно, если используете в личных / образовательных целях (по состоянию на 2014-03-20).