Каков “наилучший” способ хранения международных адресов в базе данных?

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

Вопрос

Что такое "Лучшие" способ хранения международных адресов в базе данных?Ответьте в виде схемы и объяснения причин, по которым вы решили нормализовать (или нет) именно так, как вы это сделали.Также объясните, почему вы выбрали тип и длину каждого поля.

Примечание:Вы сами решаете, какие поля считаете необходимыми.

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

Решение

Обычный текст произвольной формы.

Проверить все почтовые индексы мира слишком сложно;фиксированный список стран слишком чувствителен с политической точки зрения;обязательное деление штата / региона / другого административного подразделения просто неуместно (слишком часто меня спрашивают, в каком округе я живу - когда я этого не делаю, потому что Большой Лондон вообще не округ).

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

Исключением из этого правила является случай, когда вы делаете что-то, что в любом случае естественным образом ограничено рамками одной страны.В этой ситуации вам следует запросить, скажем, пару { почтовый индекс, номер дома }, которой достаточно для идентификации почтового адреса.Я полагаю, вы могли бы добиться аналогичного результата с расширенным почтовым индексом в США.

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

В прошлом я моделировал формы, которые должны были быть международными, после заполнения формы адреса доставки ups / FedEx на их веб-сайтах (я подумал, что если они не знают, как обработать международный заказ, то мы все обливаемся из шланга).Поля, которые они используют, могут быть использованы в качестве справочных данных для настройки вашей схемы.

В общем, вам нужно понять, зачем вам нужен адрес.Это для доставки/почтовой рассылки?Тогда действительно есть только одно требование - отделить страну.Остальные строки имеют произвольную форму и заполняются пользователем.Причиной этого является распространенная стратегия пересылки почты :любая входящая почта для другой страны пересылается без просмотра других адресных строк.Следовательно, подробная информация обрабатывается только сортировщиком почты, расположенным в самой стране.Как и получатель, они будут знакомы с национальными конвенциями.

(UPS может объединять несколько небольших европейских стран, например..все блюда из Нидерландов, вероятно, подаются из Бельгии - идея все еще актуальна.)

Я думаю, добавить текст страны / города и адреса будет неплохо.данные о стране и городе должны быть указаны отдельно для отчетности.Менеджеры всегда запрашивайте отчеты такого рода, которых вы не ожидаете, и я не предпочитаю запускать ПОДОБНЫЙ запрос через большую базу данных.

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

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

Вам необходимо предоставить немного больше информации о том, как вы планируете использовать эти данные.Например, такие поля, как City, State, Country, могут быть либо текстом в одной таблице, либо кодами, которые связаны с отдельной таблицей внешним ключом.

Проще всего было бы

Адрес_line_01 (обязательно, незаполненный) Адрес_line_02 Адрес_line_03 Ориентир Город (обязательно) Pin-код (обязательно) Провинция_район Штат (Обязательно) Страна (обязательно)

Все вышеперечисленное может быть текстовым / в Юникоде с соответствующей длиной полей.

Номера телефонов, если это применимо.

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