Каков «лучший» способ хранить международные адреса в базе данных? - PullRequest
40 голосов
/ 23 августа 2008

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

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

Ответы [ 6 ]

25 голосов
/ 23 августа 2008

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

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

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

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

9 голосов
/ 29 сентября 2008

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

5 голосов
/ 29 сентября 2008

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

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

2 голосов
/ 09 мая 2011

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

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

2 голосов
/ 18 сентября 2009

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

0 голосов
/ 23 августа 2008

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

Самый простой будет

Address_Line_01 (обязательно, не пусто) Address_Line_02 Address_Line_03 веха Город (обязательно) Pin (обязательно) Province_District Государство (обязательно) Страна (обязательно)

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

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

...