Я обобщу свои мысли из моего блога - Урок по хранению адресов .
В моем текущем проекте [я работаю в логистической компании] мы храним международные адреса. Я провел исследование адресов во всем мире при разработке этой части базы данных. Там много разных форматов. В западном мире мы склонны использовать довольно унифицированный формат - несколько различий, но они в основном:
- Номер улицы - Числовой
- Название дома или здания - [VarChar - в Великобритании некоторые дома / здания идентифицируются по имени, а не по номеру]
- Суффикс номера улицы [VarChar, хотя в большинстве случаев достаточно Char (1)]
- Название улицы [VarChar]
- Тип улицы [VarChar или Int, если у вас есть таблица StreetTypes]
- До сих пор я нашел 262 уникальных типа в англоязычном мире, вероятно, их больше, и не забывайте другие языки, например, Штрассе, Рю и т.д.
- Направление улицы [VarChar (2)]
- N, E, S, W, NE, SE, NW, SW
- Тип адреса [VarChar или Int, если у вас есть таблица AddressTypes]
- PO Box
- Квартира
- Строительство
- Пол
- Office
- Люкс
- и т.д ...
- Идентификатор типа адреса [VarChar]
- т.е. Номер ящика, номер квартиры, номер этажа помните номера квартир и офисов, где иногда есть буквенно-цифровая информация - например, 1A
- Местный муниципалитет [VarChar или Int, если у вас есть таблица муниципалитетов]
- Например, если ваша деревня / деревня появляется в адресе перед городом.
- Город / город [VarChar или Int, если у вас есть таблица городов]
- Управляющий район [VarChar или Int, если у вас есть таблица районов]
- Штат (США)
- Провинция (Канада)
- Федеральный округ (Мексика)
- Округ (Великобритания)
- и т.д ...
1098 **
- Почтовая площадь [VarChar]
- Почтовый индекс (США)
- Почтовый индекс (Канада, Мексика)
- Почтовый индекс (Великобритания)
- Страна [VarChar или Int, если у вас есть таблица стран]
Похоже, что это относится к большинству стран, но порядок полей может отображаться по-разному. Вы можете найти список форматов отображения на http://www.bitboost.com/ref/international-address-formats.html#Formats
Например, во многих странах почтовый индекс указывается перед названием города, а номер улицы - после названия улицы. В Канаде, США и Великобритании номер улицы предшествует названию улицы, а почтовый индекс (или почтовый индекс) - после названия города.
Отвечая на ваш вопрос о разделении адресов по разным странам, я не стал бы это предлагать, это просто усложнит жизнь в других областях - например, в отчетности. Формат, который я предоставил, охватывает все адреса в нашей базе данных логистики, которая охватывает США, Канаду, Мексику и Великобританию без каких-либо проблем. Он также охватывает все наши адреса в Европе, Китае, Японии и Малайзии. Я не могу говорить за другие страны, но мне еще не приходилось хранить адрес из страны, которую эти поля не будут поддерживать.
Я не предлагаю использовать формат Address1, Address2, Address3, предложенный другими и встречающийся во многих базах данных, потому что анализ информации об адресе из буквенно-цифровой строки не так прост, как может показаться на первый взгляд, особенно если данные не отображаются. введен правильно, из-за дезинформации, опечатки, орфографической ошибки и т. д. Если вы разделяете свои поля, вы можете использовать дистанционные алгоритмы для проверки на возможное значение, использовать вероятность для проверки названия улицы по почтовому индексу и номеру улицы или для проверки провинции и города по названию улицы и т. д. Попробуйте сделать что-нибудь из этого, когда у вас есть строка, обозначающая весь ваш уличный адрес. Это не тривиальный вопрос, если только вы не фантазируете.
QA в базе данных адресов - головная боль, точка. Самый простой способ упростить вашу жизнь в этой области - убедиться, что во всех полях содержится только один фрагмент информации, который можно автоматически проверить на правильность при входе. Вероятность, дистанционные алгоритмы и регулярные выражения могут проверять правильность ввода и обеспечивать обратную связь с пользователем в отношении их ошибки и предлагать подходящие исправления.
Одно предостережение, о котором следует помнить, - это дороги с названиями, которые также являются типами улиц. Если вы путешествуете по Канаде, вам нужно знать о «Авеню-роуд» в Торонто, которая вас сильно опередит, если вы используете Адрес1, 2, 3 формат. Это, вероятно, происходит и в других местах, хотя я не знаю о них - этого одного экземпляра мне хватило, чтобы кричать WTF?!