|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Понимаю, что этот вопрос был здесь задан не раз, те топики я читал и полезного как-то не вынес. Поэтому прошу не судить строго, подниму эту тему еще раз. Мне нужно хранить в БД персональные данные (имя человека, email, телефон) и адреса (допустим этих же людей). Вопрос в том, как спроектировать таблицу(ы) для хранения адресов. Первой моей идеей было хранить адреса прямо в таблице юзеров (вместе с мейлом и телефоном). Вторая идея - вынести в отдельную таблицу адресов и хранить там в форме id, city, street, house, apt. Но это не решает проблему вертикальной дупликации строковых значений: у меня будет очень много Москв и Санкт-Петербургов, например. Значит, нужно создать таблицу city и снова делать туда FK и потом JOINить все это дело. Улицы, по идее тоже бы неплохо хранить в своей таблице и связать их с теми городами, которым они принадлежат. На самом деле уже получается довольно громоздкая БД для такого просто приложения (по сути простейшая CRM система). Вот и когда я уже дошел до такого состояния, что для выполнения простейшего запроса нужно сделать запрос в 3 JOINа на 4 таблицы, я заметил интересную вещь у меня вертикальную дупликация как минимум идет по именам: и вот я сейчас думаю, почему меня должно смущать, что у меня в таблице 2000 Москв, а 2000 Андреев - это нормально? Или нужно создавать таблицу с именами? ;) В общем, по большому счету вопрос сводится к тому, насколько она нужна в данном случае нормализация и насколько глубоко это все нужно нормализовывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 01:35 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyushaВ общем, по большому счету вопрос сводится к тому, насколько она нужна в данном случае нормализация и насколько глубоко это все нужно нормализовывать? Замечательный вопрос. Осталось выяснить для чего нужна сама нормализация (ну не нужна же она только для галочки, правда?) и вы сразу получите ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 07:24 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Привязывайтесь к ФИАС. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 13:06 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyushaпочему меня должно смущать, что у меня в таблице 2000 Москв, а 2000 Андреев - это нормально? Потому что Москва одна, а Андреи разные. Смущать должно то, что это непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 13:07 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Посмотрите что такое КЛАДР. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 13:30 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Не нужно смотреть КЛАДР, он не обновляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 16:21 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
PizzaPizzaОсталось выяснить для чего нужна сама нормализация (ну не нужна же она только для галочки, правда?) и вы сразу получите ответ. Вот это и непонятно. Т.е. почему email и телефон я храню в таблице user, а адрес этого user'а выношу в таблицу address? Вот читаю, например: авторНормализация нужна для борьбы с избыточностью. т.е. данные не дублируются и связаны только внешними ключами. Ок, допустим хранить имя клиента в таблице order - это глупо (у одного юзера может быть овер до черта заказов). Но в моем случае - адрес у него может быть только один. Где здесь дупликация? В принципе тут вопрос, а является ли мой вариант в принципе не нормализованным. Смотрим по формам: авторПервая нормальная форма: запрещает повторяющиеся столбцы (содержащие одинаковую по смыслу информацию) запрещает множественные столбцы (содержащие значения типа списка и т.п.) требует определить первичный ключ для таблицы, то есть тот столбец или комбинацию столбцов, которые однозначно определяют каждую строку Повторяющихся столбцов нет (номер дома и город - это не одинаковая по смыслу информация). Множественных столбцов нет. Первичный ключ есть. Дальше, аленькая ремарочка: если таблица находится в первой нормальной форме и первичный ключ у нее состоит из одного столбца, то она автоматически находится и во второй нормальной форме (мой pk - user_id, один столбец). авторТретья нормальная форма Чтобы таблица находилась в третьей нормальной форме, необходимо, чтобы неключевые столбцы в ней не зависели от других неключевых столбцов, а зависели только от первичного ключа. Самая распространенная ситуация в данном контексте - это расчетные столбцы, значения которых можно получить путем каких-либо манипуляций с другими столбцами таблицы. Для приведения таблицы в третью нормальную форму такие столбцы из таблиц надо удалить. Здесь непонятно: столбец город не зависит ни от первичного ключа, ни от других столбцов - никаким образом получить город пользователя из других столбцов нельзя. Вот так вот. авторЗачастую, чтобы извлечь информацию из нормализованной базы данных, приходится конструировать очень сложные запросы, которые к тому же, бывает, работают довольно медленно - из-за, главным образом, большого количества соединений таблиц. Поэтому, чтобы увеличить скорость выборки данных и упростить программирование запросов, нередко приходится идти на выборочную денормализацию базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 19:04 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyushaВот это и непонятно. Т.е. почему email и телефон я храню в таблице user, а адрес этого user'а выношу в таблицу address? Не с этого надо начинать. Базовым вопросом является "а для чего именно ты вообще хранишь почту, телефон и телеграф адрес в своей базе". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 20:07 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
авторНормализация нужна для борьбы с избыточностью. т.е. данные не дублируются и связаны только внешними ключами. Вы так и не ответили на вопрос, зачем нужна нормализация. Нормализация и есть, в частности, борьба с избыточностью. А вот зачем эта борьба с избыточностью нужна вам? Это вопрос. Если у вас максимумы порядка несколько десятков тысяч записей на таблицу и/или пару запросов в секунду и нет требований по ожиданиям, то можно обойтись без нормализации. Нормализация дает вам а) Производительность и требования к оборудованию. Уменьшение объёмов базы за счет уменьшения объёма данных. Меньше памяти надо - меньше информации обрабатывать - быстрее запросы. Меньше памяти надо - больше влезает в кеши - быстрее запросы. Меньше размеры индексов - быстрее запросы. б) Логическую цельность. Когда у вас 2000 Москв или 2000 Андреев в базе, то, при некоторых условиях (bulk insert или ручное редактирование/вставка) у вас будет 1999 Москв и 1 Маскв или 1999 Андреев и 1 Андрев. Вопрос только в том, вам это надо все в ваших конкретных условиях или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 20:24 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyusha Здесь непонятно: столбец город не зависит ни от первичного ключа, ни от других столбцов - никаким образом получить город пользователя из других столбцов нельзя. Ээ, Вы уверены что не зависит? Скажем, по улице и дому "Красная площадь, 7" - никак-никак нельзя узнать город? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 20:52 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyushaОк, допустим хранить имя клиента в таблице order - это глупо (у одного юзера может быть овер до черта заказов). Но в моем случае - адрес у него может быть только один. Где здесь дупликация? У юзера может быть 2 адреса: регистрации и проживания. Вы же не указали, что это за адрес... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 21:00 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
MegabyteУ юзера может быть 2 адреса: регистрации и проживания. Вы же не указали, что это за адрес.. а 2-4 почти что норма(встречала и 72) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 21:43 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАа 2-4 почти что норма(встречала и 72) Да ладно, братки разберутся из какой квартиры вещи выносить. В случае чего соседей ласково попросят о сотрудничестве добрым словом и револьвером. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 22:01 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyushaPizzaPizzaОсталось выяснить для чего нужна сама нормализация (ну не нужна же она только для галочки, правда?) и вы сразу получите ответ. Вот это и непонятно. Т.е. почему email и телефон я храню в таблице user А действительно, почему? Что стало причиной такого решения? Ведь у пользователя может быть три email-а, два телефона, какой-нибудь skype, linkedin, и ещё множество разнотипных контактов? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 22:05 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
1 таблица - тип адреса 2 таблица - тип части адреса 3 таблица - адрес 2 -> 1 2 -> 3 2 -> 2 2 -> users запрос к адресу - иерархический (для полного адреса) Такая конструкция у меня пока работает успешно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 23:41 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
сорри, опечатался -> - это один-ко-многим 1 -> 3 1 -> 2 2 -> 3 3 -> 3 users -> 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 01:03 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Я может чего-то не понимаю, но автору религия не позволяет сделать view(по городам, улицам и так далее) и без всяких джоинов оттуда брать что угодно? Если структура уже готова и она рабочая - автоматизируйте свои запросы - вы ж затем специальность свою и получали. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 08:28 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Alibek B.Не нужно смотреть КЛАДР, он не обновляется. Актуальность базы: 2019.01.17 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 08:34 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Надо же, действительно. Но при этом: https://www.gnivc.ru/inf_provision/classifiers_reference/kladr/ выгрузка адресных сведений в формате КЛАДР 4.0 будет осуществляться до 31.12.2017г. После 31.12.2017г сведения из ГАР будут выгружаться только в формате ФИАС. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 08:43 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
Alibek B.Надо же, действительно. Но при этом: https://www.gnivc.ru/inf_provision/classifiers_reference/kladr/ выгрузка адресных сведений в формате КЛАДР 4.0 будет осуществляться до 31.12.2017г. После 31.12.2017г сведения из ГАР будут выгружаться только в формате ФИАС. и тем не менее, посмотреть можно(как это делают многие банки, например), просто потому что кладр на данный момент может иметь то, чего нет в ФИАС. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 08:45 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
авторВ целях унификации адресных сведений, содержащихся в различных информационных ресурсах, с учетом предоставления переходного периода для модификации соответствующих информационных систем, выгрузка адресных сведений в формате КЛАДР 4.0 будет осуществляться до 31.12.2017г. После 31.12.2017г сведения из ГАР будут выгружаться только в формате ФИАС. Очевидно речь идет о том, что ГНИВЦ после 31.12.2017г загружает адреса в формате ФИАС А КЛАДР как был, так и останется. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2019, 09:20 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyusha, customer != user ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2019, 00:58 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyusha, Первое что надо сделать, это проимпортировать ФИАС (бывший кладр) Но всё зависит от постановки задачи и требуемых операций от адресов. Что такое проблема вертикальной дубликации осталось загадкой... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2019, 07:21 |
|
Как хранить адреса в БД?
|
|||
---|---|---|---|
#18+
tasyushaпочему меня должно смущать, что у меня в таблице 2000 Москв, а 2000 Андреев - это нормально? Потому что эти 2000 Москв - это одна сущность. И если ее переименуют в Старые Васюки, придется менять 2000 строк, а это то, чего хотят избежать с помощью нормализации. А Андрей само по себе - это не сущность, это атрибут человека. Если даже человек Андрей решить через суд сменить себе имя на Сергей и принесет новые документы, переименовывать нужно будет его одного - апдейтить одну строку, и это нормально. Не существует такой ситуации, когда всех Андреев пришлось бы переименовывать в Сергеев. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2019, 12:01 |
|
|
start [/forum/topic.php?fid=32&fpage=6&tid=1539963]: |
0ms |
get settings: |
13ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 393ms |
0 / 0 |