Мне нужно хранить почтовые индексы в базе данных. Насколько большой должна быть колонна?

76

Я ожидаю, что столбец будет VARCHAR2 в моей базе данных Oracle.

US Zips: 9.

Канадский - 7.

Я думаю, что 32 символа были бы разумным верхним пределом

Что мне не хватает?

[EDIT] TIL: 12 - разумный ответ на вопрос Спасибо всем, кто внес вклад.

  • 0
    Полезная ссылка, однако ее точность может быть немного выше. Например, австралийский почтовый индекс состоит из 7 символов, а на самом деле их 4. Ссылка: en.wikipedia.org/wiki/Postcodes_in_Australia и список почтовых индексов, доступный по адресу www1.auspost.com.au/postcodes .
  • 0
    Re: мой предыдущий комментарий - это не значит, что этот список не полезен в качестве руководства. Если предположить, что список содержит ошибки более длинных почтовых индексов, то самая длинная длина составляет 9 символов, поэтому 16 символов или около того должны дать вам достаточно места для дыхания.
Показать ещё 4 комментария
Теги:
database
globalization
postal-code

8 ответов

31

Снимая страницы Wikipedia Postal Codes, должно быть более 32 символов. Я бы сказал, что даже 16 символов хороши.

  • 7
    Хорошая ссылка. Насколько я могу судить, даже с учетом пунктуации в формате US ZIP + 4 для любой страны будет достаточно 10 символов.
  • 0
    Основываясь на этой ссылке, со страницы, указанной выше, я бы выбрал 18 для размещения таких стран, как Чили: en.wikipedia.org/wiki/List_of_postal_codes
Показать ещё 1 комментарий
16

Как уже писал @neil-mcguigan, у википедии есть достойная страница по этой теме. На основании этого 12 символов должны сделать это: http://en.wikipedia.org/wiki/List_of_postal_codes

В статье в Википедии перечислены ~ 254 страны, что довольно хорошо относительно ВПС (Universal Postal Union) имеет 192 страны-члена.

  • 2
    Похоже, Монтсеррат состоит из 13 символов, например, в приведенной выше общей ссылке «MSR 1110-1350».
  • 1
    Обратите внимание, что Монтсеррат всего 8 символов, 1110-1350 обозначает диапазон. discovermni.com/about-montserrat/montserrat-post-codes
Показать ещё 1 комментарий
10

Почему бы вам объявить размер поля больше, чем фактические данные, которые вы ожидаете сохранить в нем?

Если исходная версия вашего приложения будет поддерживать адреса США и Канады (которые я вывел из того факта, что вы указали эти размеры в своем вопросе), я бы объявил это поле как VARCHAR2 (9) ( или VARCHAR2 (10), если вы собираетесь хранить дефис в ZIP + 4 полях). Даже глядя на сообщения, сделанные другими людьми в почтовых кодах по странам, VARCHAR2 (9) или VARCHAR2 (10) будет достаточным для большинства, если не всех других стран.

Вниз по строке вы всегда можете добавить ALTER столбец, чтобы увеличить длину, если возникнет такая необходимость. Но, как правило, трудно предотвратить кого-то, где-то от принятия решения о получении "креативных" и 50 других персонажей в поле VARCHAR2 (50) по той или иной причине (т.е. Потому, что они хотят другую линию на транспортной метке). Вы также должны иметь дело с проверкой граничных случаев (будет ли каждое приложение, которое отображает ZIP-дескриптор 50 символов?). И с тем фактом, что, когда клиенты извлекают данные из базы данных, они обычно выделяют память на основе максимального размера данных, которые будут извлечены, а не фактической длины данной строки. Вероятно, это не так уж и важно в этом конкретном случае, но 40 байт на строку могут быть приличным количеством RAM для некоторых ситуаций.

Как и в стороне, вы можете также рассмотреть возможность хранения (по крайней мере для адресов США) почтового индекса и расширения +4 отдельно. В целом полезно иметь возможность генерировать отчеты по географическому региону, и вы можете часто захотеть поместить все в почтовый индекс вместе, а не разбить его на +4. В этот момент полезно не пытаться SUBSTR вывести первые 5 символов для почтового индекса.

  • 4
    Что ж, если предположить, что мы кодируем что-то глупое, например, Pro * C, наличие достаточно большого поля для роста означает, что к коду не нужно обращаться в случае увеличения использования.
  • 0
    Да, имеет смысл разбить почтовый индекс на 5 и 4 цифры в зависимости от того, для чего вы планируете его использовать. Например, если вы выполняете какое-то сопоставление адресов, вы можете сначала найти совпадения на zip5 и разрешить неоднозначные ситуации с помощью zip 9. Это также помогает использовать код страны
3

Нормализация? Почтовые коды могут использоваться более одного раза и могут быть связаны с названиями улиц или названиями городов. Отдельная таблица (ы).

  • 0
    Интересно. Другая точка зрения просто отвергнута без причины. +1
  • 0
    Почтовый индекс обычно ссылается на квартал на одной стороне улицы. Чтобы найти более широкий регион, вы должны выбрать первую половину почтового индекса. Наличие этой информации в отдельной таблице действительно ничего не поможет, и ее было бы сложнее поддерживать.
Показать ещё 1 комментарий
3

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

Если вам действительно не нужно РАБОТА с почтовым кодом, я бы предложил не беспокоиться об этом. По работе я имею в виду специальную обработку, а не просто для печати ярлыков адресов и т.д.

Просто создайте три или четыре поля адреса VARCHAR2 (50) [например] и дайте пользователю ввести то, что они хотят.

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

  • 0
    Согласен. Используя поле VARCHAR2, реальность для поля, такого как почтовый индекс, не имеет значения. Слишком большой размер лучше, чем раздражать одного клиента, потому что он не может ввести свои данные.
  • 0
    А varchars удобны, так как базы данных (по крайней мере, DB2) могут оптимизировать их хранение, чтобы не тратить пространство памяти.
Показать ещё 8 комментариев
2

Канадские почтовые коды всего 6 символов, в виде букв и цифр (LNLNLN)

  • 3
    Канадские почтовые индексы в середине содержат пробел "ANA NAN", что составляет 7 символов.
  • 1
    Но пространство всегда посередине, поэтому вам не нужно его хранить.
Показать ещё 7 комментариев
1

Если вы хотите интегрировать почтовые коды в базу данных, лучше всего использовать базу данных geonames. Хотя это трудно использовать и понимать, но это самая большая географическая база данных, доступная для пользователей, подобных нам.

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

Для вашей информации varchar (20) достаточно для хранения почтовых кодов

0

В Великобритании опубликованы стандарты: Каталог стандартов данных правительства Великобритании

Max 35 characters per line 

Международный почтовый адрес:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

Длина почтового индекса в Великобритании:

Minimum 6 and Maximum 8 characters 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню