За последние 24 часа нас посетили 29846 программистов и 1760 роботов. Сейчас ищут 890 программистов ...

Как хранить адреса в БД?

Тема в разделе "MySQL", создана пользователем Таська, 20 янв 2019.

Метки:
  1. Таська

    Таська Новичок

    С нами с:
    21 сен 2018
    Сообщения:
    15
    Симпатии:
    0
    Мне нужно хранить в БД персональные данные (имя человека, email, телефон) и адреса (допустим этих же людей). Вопрос в том, как спроектировать таблицу(ы) для хранения адресов. Первой моей идеей было хранить адреса прямо в таблице юзеров (вместе с мейлом и телефоном).

    Вторая идея - вынести в отдельную таблицу адресов и хранить там в форме id, city, street, house, apt. Но это не решает проблему вертикальной дупликации строковых значений: у меня будет очень много Москв и Санкт-Петербургов, например. Значит, нужно создать таблицу city и снова делать туда FK и потом JOINить все это дело. Улицы, по идее тоже бы неплохо хранить в своей таблице и связать их с теми городами, которым они принадлежат.

    На самом деле уже получается довольно громоздкая БД для такого просто приложения (по сути простейшая CRM система). Вот и когда я уже дошел до такого состояния, что для выполнения простейшего запроса нужно сделать запрос в 3 JOINа на 4 таблицы, я задумался,а это нормально вообще?

    Как вы храните адреса в своих проектах? Не привязываясь к КЛАДР или ФИАС?
     
  2. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Мне кажется, что в отдельную таблицу можно записывать номера телефонов, а также емейлов.
    Т.к. телефонов, впрочем как и емейлов может быть несколько, что в наше время вполне себе логично.
    Поэтому не то, что можно, а нужно :)

    Вот имен и фамилий, априори - only 1, иначе что это за раздвоение личности-мать его))
    Поэтому можно сделать 2 таблицы user-s и setting-s - в которой как раз можно и прописывать как телефоны, так и емейлы, а может что-то ещё.
    Привязать всё можно по id юзера ( пользователя ) и не нужно никакие 4 join-a
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @lastdays, речь про страна, город, улица, дом
     
  4. lastdays

    lastdays Активный пользователь

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    я вполне себе прочитал сообщение ТС-а, заодно продублирую его.

    =>

    Мне нужно хранить в БД персональные данные (имя человека, email, телефон) и адреса (допустим этих же людей).
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @lastdays, ты вроде всегда был адекватным, что случилось то? Полнолуние? :)
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    не очень понятно что за вертикальная дупликация вас беспокоит...
    но хранить адрес в виде составной записи справочников - это нормально и правильно
    если справочник городов, улиц и прочего не задается априори КЛАДР и прочее - и вы сами добавляете их, то сделать их уникальными и предварительно проверять - нет ли записи уже и потом вставлять, это решит проблему с дублированием.
    Что это даст?
    - возможность реализации выбора с связанными полями выбора или автоподстановку по первым буквам
    - уникализация компонентов адреса,
    - произвольный составление формата адреса ( город, улица, дом, или дом, улица, дом итд)
    - отсутствие разночтений адресов, опечаток например Москва и Масква и Мсква, москва
    - удобная выборка с группировкой по компонентам адреса.. по городу, по улице в городе итд
    а 3-4 джойна ерунда )
     
  7. Таська

    Таська Новичок

    С нами с:
    21 сен 2018
    Сообщения:
    15
    Симпатии:
    0
    Прокомментируйте вот такую схему. Из книги Харрингтона, если что.
    [​IMG]
     

    Вложения:

    • dbdesign.png
      dbdesign.png
      Размер файла:
      144,6 КБ
      Просмотров:
      44
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    ништяк
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    зачем?
    абстрактный конь в сферическом вакууме?
    все зависит от задач...
    если это информационное поле и нафиг не нужно будет - можно вообще все в одном поле хранить - adres и пиши туда что хочешь