Мне нужно хранить в БД персональные данные (имя человека, email, телефон) и адреса (допустим этих же людей). Вопрос в том, как спроектировать таблицу(ы) для хранения адресов. Первой моей идеей было хранить адреса прямо в таблице юзеров (вместе с мейлом и телефоном). Вторая идея - вынести в отдельную таблицу адресов и хранить там в форме id, city, street, house, apt. Но это не решает проблему вертикальной дупликации строковых значений: у меня будет очень много Москв и Санкт-Петербургов, например. Значит, нужно создать таблицу city и снова делать туда FK и потом JOINить все это дело. Улицы, по идее тоже бы неплохо хранить в своей таблице и связать их с теми городами, которым они принадлежат. На самом деле уже получается довольно громоздкая БД для такого просто приложения (по сути простейшая CRM система). Вот и когда я уже дошел до такого состояния, что для выполнения простейшего запроса нужно сделать запрос в 3 JOINа на 4 таблицы, я задумался,а это нормально вообще? Как вы храните адреса в своих проектах? Не привязываясь к КЛАДР или ФИАС?
Мне кажется, что в отдельную таблицу можно записывать номера телефонов, а также емейлов. Т.к. телефонов, впрочем как и емейлов может быть несколько, что в наше время вполне себе логично. Поэтому не то, что можно, а нужно Вот имен и фамилий, априори - only 1, иначе что это за раздвоение личности-мать его)) Поэтому можно сделать 2 таблицы user-s и setting-s - в которой как раз можно и прописывать как телефоны, так и емейлы, а может что-то ещё. Привязать всё можно по id юзера ( пользователя ) и не нужно никакие 4 join-a
я вполне себе прочитал сообщение ТС-а, заодно продублирую его. => Мне нужно хранить в БД персональные данные (имя человека, email, телефон) и адреса (допустим этих же людей).
не очень понятно что за вертикальная дупликация вас беспокоит... но хранить адрес в виде составной записи справочников - это нормально и правильно если справочник городов, улиц и прочего не задается априори КЛАДР и прочее - и вы сами добавляете их, то сделать их уникальными и предварительно проверять - нет ли записи уже и потом вставлять, это решит проблему с дублированием. Что это даст? - возможность реализации выбора с связанными полями выбора или автоподстановку по первым буквам - уникализация компонентов адреса, - произвольный составление формата адреса ( город, улица, дом, или дом, улица, дом итд) - отсутствие разночтений адресов, опечаток например Москва и Масква и Мсква, москва - удобная выборка с группировкой по компонентам адреса.. по городу, по улице в городе итд а 3-4 джойна ерунда )
зачем? абстрактный конь в сферическом вакууме? все зависит от задач... если это информационное поле и нафиг не нужно будет - можно вообще все в одном поле хранить - adres и пиши туда что хочешь