@romicohen
Системный Архитектор

Как лучше всего хранить адреса в БД (MySQL)?

Задача типовая, может подскажете типовое наилучшее решение?

В проекте на MySQL нужно хранить данные клиентов их контрагентов. И там и там есть адреса.

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

Вопрос по структуре таблицы:

- Есть ли какое-то типовое ОПТИМАЛЬНОЕ решение для этого случая?

Т.е.:

- Какие поля?
- Может лучше в несколько таблиц разнести?

В общем, это ведь все делают, многие поколения уже))) да?

Выработался ли какой-то стандарт?

Где его взять?

Спасибо.

upd.: по мотивам ответов от кэпов (ребят, я по-доброму :) - да, разумеется, речь НЕ идет о записи адресов одной строкой, речь идет о квантизации адреса :) вопрос в том - какие именно поля делать для этого? нужно ли страны и города выносить в отдельные таблицы (99% что нужно)? в общем, какое-то готовое решение хочется получить, или узнать где его получить.
  • Вопрос задан
  • 2782 просмотра
Пригласить эксперта
Ответы на вопрос 3
DollyPapper
@DollyPapper
Ну во первых если у вас уже есть разные сущности которые могут на один и тот же адрес ссылаться, то конечно же стоит вынести адреса в свою таблицу, это требования НФ в построении БД. Так мы уменьшаем дублирование.
А вот дальше по структуре самой таблицы уже нужно от задачи плясать. Если вы просто будете выбирать адрес целиком, то хреначьте просто в строку весь адрес. Если нужно будет найти все дома под номером "6", то логично в отдельную колонку вынести номер дома и т.д.
Ну вообще я бы сразу распилил адрес, т.к. сегодня нам не нужно искать дома с номером 6, а завтра нужно.
Вопрос на сколько частей адрес распиливать, тоже хороший вопрос. Как минимум номер дома отделять нужно.
Ответ написан
Комментировать
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
По классике есть 2 вышеупомянутых подхода: Разбивать адрес на составные сущности и записывать все что можно в виде ключей, и писать адрес 1 строкой, забив на всякие быстрые агрегации/селекции. Что подходит конкретно в вашем случае из вопроса абсолютно не ясно, так как не содержит главного - как оно используется.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Сейчас многие склоняются к максиме "все как сервис"
В итоге вы имеете табличку со ссылкой на адрес (id) и полную строку адреса
При необходимости запрашиваете.
Другой вариант это разбор адреса на своей стороне. Для России я что то подобное сделал посмотрите в моем гите
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы