Существует ли общий дизайн базы данных адресов улиц для всех адресов мира?

Я программист и, честно говоря, не знаю уличных адресных структур мира, просто как в моей стране структурировано :) Итак, какой лучший и общий дизайн базы данных для хранения уличных адресов? Он должен быть настолько прост в использовании, быстро запрашивать и динамично хранить все адреса улиц Мира, который идентифицирует только один id
Спасибо большое

12 ответов


можно представлять адреса из множества разных стран в стандартном наборе полей. Основная идея именованного маршрута доступа (магистрали), на котором расположены названные или пронумерованные здания, является довольно стандартной, за исключением Китая. Другие почти универсальные понятия включают в себя: название населенного пункта (город/городок/деревня), который можно в целом назвать населенным пунктом; название региона и присвоение буквенно-цифрового почтового индекса. Обратите внимание, что почтовые индексы, также известный как zip коды, являются чисто цифровыми только в некоторых странах. Вам понадобится много полей, если вы действительно хотите быть универсальными.

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

разумный формат для хранения адресов будет следующим:

  • Адресные Строки 1-4
  • населенного пункта
  • края
  • почтовый индекс (или индекс)
  • страны

адресные строки 1-4 могут содержать такие компоненты, как:

  • здание
  • Строение
  • номер помещения (дом номер)
  • Выбор Помещения
  • проезд
  • Суб-Проходной Двор
  • Двойной Зависимой Местности
  • Суб-Местности

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

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

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


посмотреть База Данных Ответов. В частности, это охватывает многие случаи:

(все типы данных переменной длины)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

enter image description here


спросите себя, что является главной цель хранения этих данных? Вы действительно собираетесь отправить письмо человеку по адресу? Отслеживать демографию, население? Иметь возможность спрашивать у абонентов их правильный адрес в рамках некоторой базовой аутентификации/проверки? Все вышеперечисленное? Ничего из вышеперечисленного?

в зависимости от вашей фактической потребности, вы определите или А) это не имеет значения, и вы можете пойти на свободный текстовый подход, или б) структурированные / конкретные поля для всех стран или c) архитектура страны.


иногда ближе всего вы можете добраться до адреса улицы-это город.

У меня когда-то был проект, чтобы поместить все средние школы в Индии в Google Maps. Я написал шикарную программу с помощью Google API и подумал, что это будет довольно легко.

затем я получил данные от клиента. Некоторые школьные адреса были такими, как "напротив рынка, рядом с парикмахерской"или" рядом со старой автобусной остановкой".

Это сделало мою задачу намного сложнее, так как, к сожалению, Google API не поддерживает этот формат.


для международных адресов удивительно трудно найти способ форматирования информации, если она разбита на поля. Например, итальянский адрес использует:

<street address>
<zip> <town> <region>
<country>

например

Via Eroi della Repubblica
89861 Tropea VV
Italy

это довольно отличается от порядка для нас адресов-на второй строке.

см. также вопросы SO:

также проверьте тег'почтово-код'.


редактировать: обратный порядок области и города-per ВПС


может быть, это полезно: https://gist.github.com/259744 Для проекта я собрал таблицу информации обо всех странах мира, включая ISO-коды, домен верхнего уровня, телефонный код, автомобильный знак, длину и регулярное выражение zip. Названия стран и комментарии к сожалению только на немецком языке...


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

просто из шляпы, я могу думать о следующей структуре:

  • страны
  • Регион (Штат / Провинция)
  • Населенный Пункт (Город / Муниципалитет)
  • суб-населенный пункт (уезд / другое подразделение населенного пункта)
  • улица

но как запросить его достаточно быстро?

Я всегда думаю, это может быть достигнуто, чтобы попросить почтовый индекс (или почтовый индекс), который варьируется от страны к стране, но является твердым внутри страны.

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


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

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

Я рекомендую вам не пытаться сделать его слишком умным.


лен Silverston из Универсальная Модель Данных слава рекомендует отдельную иерархию GEOGRAPHIC BOUNDARIES и в зависимости от того, сколько свободной формы вы готовы принять либо простой STREET ADDRESS LINES или производные по странам.


нет, нет стандартной схемы адресации. Она обычно варьируется от страны к стране. Даже Всемирный Почтовый Союз сказал Adressing мир, адрес для всех нет. Лучшим решением для этого является использование 2/3-буквенных стандартов кода страны, известных как ISO 3166 и относиться ко всему остальному по стандартам страны.

однако, если вы действительно отчаянно хотите использовать легкодоступные инструменты для своего проекта, вы можете попробовать Google Place API.


нет, абсолютно не. Если вы сравните путь нас и японские адреса работа, вы увидите, что это не возможно.

обновление:

с другой стороны, все можно сделать, но есть компромисс.

один подход заключается в моделировании проблемы с таблицами address и address_attribute, с отношением 1:m между ними можно смоделировать что угодно. Таблица address_attribute будет иметь pk, имя, значение и fk, который указывает назад по его адресу Родительский ПК. Это почти как использовать карту с парами имя-значение.

компромисс должен делать соединение каждый раз, когда вы хотите адрес. Вы также должны опросить имена address_attributes, чтобы выяснить, с чем вы имеете дело каждый раз.

другим подходом было бы провести более всестороннее исследование того, как адреса моделируются по всему миру. В объектно-ориентированном мире у вас может быть класс western Address (street1 / street2/city/state / zip) и другие для Японии, Китая, столько, сколько необходимо для плитки адресного пространства. Тогда у вас будет главная таблица адресов и дочерние таблицы для других типов с отношением 1:1 между ними.

Как это делает Amazon или eBay? Они грузят интернационально. Имеют ли они функции пользовательского интерфейса, специфичные для локали? Я использовал только американский язык.


ваш дизайн должен сильно зависеть от вашей цели. Некоторые люди опубликовали, как структурировать данные. Поэтому, если вы просто хотите отправить кому-то s-mail, это будет сделано. Вещи начинают усложняться, если вы хотите использовать эти данные для навигации. Автомобильная навигация потребует дополнительных структур, содержащих информацию о движении (например, односторонние дороги), в то время как пешеходная навигация потребует много дополнительных данных. Вот небольшой пример: в моем городе Мой район находится рядом с парком. Рядом с парком-бывший аэродром (по сути, один из старейших в Европе) превратился в музей авиации. Рядом с Музеем авиации находится бизнес-парк. Номер улицы для музея-39, а номера бизнес-парка начинаются с 39А. Таким образом, может показаться, что 39 и 39А близки – но требуется около мили, чтобы дойти от одного до другого (и даже дольше, если идти на машине) .
Это всего лишь небольшой пример, взятый из моего города, я думаю, вы можете найти много исключений (особенно в сельских или диких частях каждого страна.)