powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос по проектированию БД
63 сообщений из 63, показаны все 3 страниц
Вопрос по проектированию БД
    #40007963
Здравствуйте. Помогите пожалуйста разобраться. В проектируемой базе есть таблица заказов и таблица юзеров. В каждой из них нужно хранить информацию об адресе. Юзер при регистрации в приложении указывает свой домашний адрес, а при формировании заказа может указать произвольный адрес либо оставить свой (он скопируется в новую запись заказа). Соответственно есть 2 варианта:

1. Хранить адреса как в таблице юзеров, так и в таблице заказов.
2. Вынести адреса в отдельную таблицу и связать их внешним ключом с юзерами и заказами.

В принципе 2й вариант выглядит логичнее т.к. адреса по сути отдельная сущность. Но я не уверен что это лучшее решение с токи зрения производительности. Таблица заказов в последствии будет огромной, а каждому заказу всегда будет соответствовать один адрес. В большинстве случаев адреса не будут использоваться в отрыве от заказов. То есть при каждом обращении к заказу будет джойнится таблица адресов. На сколько я понимаю любой джоин между таблицами ест больше ресурсов железа чем обращение к одной таблице, но с бОльшим количеством полей. Плюс вариант №2 добавляет некоторые неудобства при создании нового юзера или заказа, т.к. при сохранении регистрационной формы нужно сначала создать запись юзера/заказа, вернуть id новой записи для создания внешнего ключа и только потом делать новую запись в таблице адресов. Без особой необходимости не хотелось бы добавлять лишнюю логику в приложение.

Какой вариант на ваш взгляд лучше с точки зрения производительности? Буду благодарен за любую помощь.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008002
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918,

конечно второй. Производительность совершенно не причём. Нужно только правильно индексы и внешние ключи создать. А первый вариант скорее всего будет противоречить нормальным формам.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008008
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918

1) На сколько я понимаю любой джоин между таблицами ест больше ресурсов железа чем обращение к одной таблице, но с бОльшим количеством полей.
2) Плюс вариант №2 добавляет некоторые неудобства при создании нового юзера или заказа, т.к. при сохранении регистрационной формы нужно сначала создать запись юзера/заказа, вернуть id новой записи для создания внешнего ключа и только потом делать новую запись в таблице адресов. Без особой необходимости не хотелось бы добавлять лишнюю логику в приложение.

1) Этот бред чаще всего распространяют те, кто плохо знает sql и не умеет проектировать БД.
2) Неудобства да, это ж программировать надо. Про нормализацию данных слышали?

А вообще отдельную таблицу адресов стоит делать, если:
1) Адресов будет все же значительно меньше, чем заказов. С учетом, что один и тот же юзер будет делать несколько заказов и с 80% вероятностью на один и тот же адрес. Тогда вы, как минимум, сэкономите пространство, т.к. адрес будет храниться 1 раз.
2) Если планируете как-то оперировать сущностью "адреса", какие-то аналитические\статистические отчеты делать. Например, кол-во заказов по городам.
Тогда бы еще посоветовал разбить адрес на составляющие: регион, город, улица, дом, квартира.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008025
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918,

ID пользователя, ID заказа в таблице Адреса?
А если два пользователя проживают по одному и тому же адресу? Или несколько заказов на один и тот же адрес?

Планируете дублировать данные? Думаете это хорошо с точки зрения производительности?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008049
Megabyte
2) Если планируете как-то оперировать сущностью "адреса", какие-то аналитические\статистические отчеты делать. Например, кол-во заказов по городам.
Тогда бы еще посоветовал разбить адрес на составляющие: регион, город, улица, дом, квартира.

взрослые люди подключают аж яндексовые базы адресов для правильной доставки
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008092
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918

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

2-й вариант. Только адрес понятие не простое, там как минимум несколько таблиц (страна, область, улица, ...). Поэтому открываем гугл карту и пробуем вбивать адрес (примерно так с подбором вариантов должно быть и у вас). Следовательно должна быть связь Пользователь:АдресаПользователя, Клиент:АдресаДоставки. Тогда в приложении пользователь сможет быстро и понятно выбирать из существующих адресов, либо создавать новый.
Что касается производительности - думаю что просадка в 2-3% по сравнению с удобством - вполне приемлемый вариант. Если сильно станет напрягать то поднимете кластер и вуаля.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008095
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918Но я не уверен что это лучшее решение с токи зрения производительности.

Это плохое решение с любой точки зрения. Адрес - не сущность, это чистый атрибут.
Сущностью может быть дом, квартира или город. Но для твоей задачи курьера эти сущности не
нужны.

Ты же не собираешься всерьёз анализировать свои доставки, группируя их по улицам?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008114
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918,

IMHO Только 1-й вариант. 2 вариант выглядит заманчиво из-за аспекта нормализации но только на первый взгляд. Ключевой момент тут: если при добавлении заказа вы не будете проверять уникальност адресса, то у вас всегда будет 1:1 соотношение.
Разбивать на две таблицы ни поизводительности не прибавит, ни места не сэкономит.
Или вы собираетесь вести логическую "уникальность" адресса и при повторяюшемся адрессе исползовать уже имейшуйся запись? Тут ешё больше проблем наворотите.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008146
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron
Или вы собираетесь вести логическую "уникальность" адресса и при повторяюшемся адрессе исползовать уже имейшуйся запись? Тут ешё больше проблем наворотите.

А если он хочет просто дать пользователю выбор аля Дом, Работа, Дача?
Еду что-ли никогда не заказывали по интернету?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008149
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918
Юзер при регистрации в приложении указывает свой домашний адрес, а при формировании заказа может указать произвольный адрес либо оставить свой (он скопируется в новую запись заказа).

Типа мне как пользователю предлагается каждый раз когда я хочу, чтобы заказ доставили на работу, а не домой, вводить заного один и тот же адрес?
Удобно
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008159
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
mikron
Или вы собираетесь вести логическую "уникальность" адресса и при повторяюшемся адрессе исползовать уже имейшуйся запись? Тут ешё больше проблем наворотите.

А если он хочет просто дать пользователю выбор аля Дом, Работа, Дача?

Какие образом это возможное желание "дать пользователю выбор" влияет или ограничивает выбор дизайна?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008160
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA

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

не смешивайте дизайн таблиц и дизайн UI.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008189
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron
skyANA

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

не смешивайте дизайн таблиц и дизайн UI.

А я и не смешиваю.

Просто дизайн таблиц какбы завязан на предметную область, где существует некий бизнес процесс.
И плясать надо от этого, а не от сферических логических "уникальностей" адреса.

Я как пользователь регистрируюсь, указываю свой домашний адрес...

Уже вопрос: а на фига вам мой домашний адрес? Предпочтительный адрес доставки? Хорошо.
А сделайте так, чтобы было удобно при заказе указывать другой, рабочий например. В один клик...

И после того как разберёте кейсы, что нужны пользователям вашей системы, после этого и проектируйте.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008232
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр1918,

В общем случае не нужно разбивать адрес на улицы, дома и т.д, отдельными атрибутами: страна, регион/штат, город, почтовый индекс; все остальное одним атрибутом: ул. Такая то, д. такой то ..., с рекомендацией заполнять так как принято в стране получения посылки.

У пользователя может быть несколько адресов, у этих адресов могут быть атрибуты: адрес доставки - да/нет, по умолчанию (может устанавливаться только для одного из адресов доставки пользователя), возможны другие атрибуты, например платежный адрес - да/нет. Т.е. в таблице адресов пользователя будет ссылка на идентификатор пользователя, ссылки на идентификатор заказа там разумеется быть не должно.

В таблицу заказов либо необходимая информация при задании адреса просто копируется, либо указывается ссылка на таблицу адресов пользователя, если указывается ссылка, то при изменении или удалении адреса использовавшегося в заказах, никакого изменения или удаления на самом деле не допускается, вместо этого строка таблицы адреса закрывается (для этого вводится дополнительный атрибут) и больше пользователю не показывается, но в системе остается, а вместо нее создается новая строка адреса, которая видна пользователю, таким образом адреса на которые были оформлены заказы задним числом не меняются.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008249
Megabyte
Александр1918

1) На сколько я понимаю любой джоин между таблицами ест больше ресурсов железа чем обращение к одной таблице, но с бОльшим количеством полей.
2) Плюс вариант №2 добавляет некоторые неудобства при создании нового юзера или заказа, т.к. при сохранении регистрационной формы нужно сначала создать запись юзера/заказа, вернуть id новой записи для создания внешнего ключа и только потом делать новую запись в таблице адресов. Без особой необходимости не хотелось бы добавлять лишнюю логику в приложение.

1) Этот бред чаще всего распространяют те, кто плохо знает sql и не умеет проектировать БД.

Из того что знаю по опыту + то что нагуглил - все же запрос с join - это более ресурсоемкая операция чем простая выборка из таблицы. Поправьте если ошибаюсь. Желательно с ссылкой на ресурс с пояснением. Для общего развития так сказать.

Megabyte

А вообще отдельную таблицу адресов стоит делать, если:
1) Адресов будет все же значительно меньше, чем заказов. С учетом, что один и тот же юзер будет делать несколько заказов и с 80% вероятностью на один и тот же адрес. Тогда вы, как минимум, сэкономите пространство, т.к. адрес будет храниться 1 раз.
2) Если планируете как-то оперировать сущностью "адреса", какие-то аналитические\статистические отчеты делать. Например, кол-во заказов по городам.
Тогда бы еще посоветовал разбить адрес на составляющие: регион, город, улица, дом, квартира.

Планируется статистика по районам города, реже по улицам, но всегда в контексте заказа ( будет браться период по размещению/закрытию или по другим полям заказа )

skyANA
Александр1918,

ID пользователя, ID заказа в таблице Адреса?
А если два пользователя проживают по одному и тому же адресу? Или несколько заказов на один и тот же адрес?

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

Думаю дублировать данные далеко не идеальный подход, но в данном случае, избегать этого не имеет особого смысла. Исходя из специфики задачи, заказов на один и тот же адрес будет немного, в худшем случае до 10 в год, в среднем 1-2. В целом не критично.

Злой Бобр
... Следовательно должна быть связь Пользователь:АдресаПользователя, Клиент:АдресаДоставки. Тогда в приложении пользователь сможет быстро и понятно выбирать из существующих адресов, либо создавать новый...

Я не совсем понял. То есть Вы предлагаете сформировать уникальный список из уже внесенных адресов (со всеми вытекающими преобразованиями структуры БД) и дать возможность юзеру выбирать из выпадающего списка, а если адреса в списке нет, то дать возможность внести новый адрес? С учетом того, что при внесении адрес детализируется как до квартиры, так и до дома в целом, то список получится огромный и неочевидный (например ул.Сидорова 8, кв.777 и просто ул.Сидорова 8 - будут два разных адреса). Скорее это запутает пользователя. Если идти по сложному пути и попытаться сформировать уникальный список адресов, то думаю что юзер должен всегда вносить адрес в ручную, а последующие проверки на уникальность делать уже после отправки формы и перед сохранением в базу.

Dimitry Sibiryakov

Александр1918Но я не уверен что это лучшее решение с токи зрения производительности.

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

Аналитические отчеты планируются. По адресам в том числе, но как я писал выше - всегда в контексте заказа.

mikron
Александр1918,

IMHO Только 1-й вариант. 2 вариант выглядит заманчиво из-за аспекта нормализации но только на первый взгляд. Ключевой момент тут: если при добавлении заказа вы не будете проверять уникальност адресса, то у вас всегда будет 1:1 соотношение.
Разбивать на две таблицы ни поизводительности не прибавит, ни места не сэкономит.
Или вы собираетесь вести логическую "уникальность" адресса и при повторяюшемся адрессе исползовать уже имейшуйся запись? Тут ешё больше проблем наворотите.

Вы правильно поняли мои опасения. Скорее всего я попытаюсь избежать формирования уникального справочника адресов т.к. это заметно усложнит задачу и может создать проблемы при внесении и изменении адресов. И соответственно соотношение адресов к заказам будет 1:1. В итоге при вынесении адреса в отдельную таблицу я получу только условную правильность структуры базы. Но при этом я буду вынужден при любом обращении к заказам каждый раз делать джойны к таблице адресов + все неудобства с этим связанные. Что касается адресов в таблице юзеров, то они аналогично не будут использоваться в отрыве от записи юзеров.
Я все же больше склоняюсь к первому варианту. Хоть он и не совсем "красивый", но больше отвечает моей задаче.

skyANA

Уже вопрос: а на фига вам мой домашний адрес? Предпочтительный адрес доставки? Хорошо.
А сделайте так, чтобы было удобно при заказе указывать другой, рабочий например. В один клик...

И после того как разберёте кейсы, что нужны пользователям вашей системы, после этого и проектируйте.


В программе будет вестись заказ разных услуг. Ремонт например. Чаще всего их будут заказывать на домашний адрес. А при желании пользователь сможет подписаться на рассылку в которой его будут информировать о разных событиях (в рамках предоставляемых услуг) проходящих по его адресу.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008258
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918
Таблица заказов в последствии будет огромной

Ох эти розовые мечты....
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008267
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Александр1918
Таблица заказов в последствии будет огромной

Ох эти розовые мечты....

+100500 Теоретики они такие. Эх, вспомнил свою наивную молодость и прям прослезился.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008269
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918
Но я не уверен что это лучшее решение с токи зрения производительности.

Вы сейчас не готовы обдумывать производительность. Ваша задача на текущем этапе развития - сделать то, что работает, не содержит лишней информации и не вызывает острого желания выбросить это нафиг. Если Вам это удастся - можете быть уверены, что это будет работать достаточно быстро, и всяко быстрее, чем тот монстр, которого Вы родите, если сейчас будете думать о производительности.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008278
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918Аналитические отчеты планируются. По адресам в том числе

Чисто из любопытства: зачем? Что-то типа "на третьей строительной заказов на 3% меньше,
чем на второй, надо туда послать пару людей раскидать рекламу по ящикам"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008319
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918,

1. таблица user (ид - имя - ...)
2. таблица user_address (ид юзера - тип адреса [работа, дом, ...] - флаг "использовать по умолчанию" - страна - ... - дом) - для каждого юзера своя копия адресов (работа/дом), даже если по одному адресу живут несколько юзеров, иначе если один поменяет - у всех поменяется
3. таблица order (ид - данные заказа - страна - ... - дом) - при выборе адреса пользователем, выбранный адрес копируется в эти поля, иначе если пользователь через год поменяет адрес - то у старых заказов он тоже поменяется

в будущем поля (страна - ... - дом) из таблиц user_address и order можно будет выделить в отдельную таблицу address, если понадобится
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008378
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77
3. таблица order (ид - данные заказа - страна - ... - дом) - при выборе адреса пользователем, выбранный адрес копируется в эти поля, иначе если пользователь через год поменяет адрес - то у старых заказов он тоже поменяется

И Вы действительно именно так проектировали что-то, находящееся в эксплуатации?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008380
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

к чему именно претензия? к полям адреса внутри таблицы order или к копированию адреса?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008384
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77
к чему именно претензия? к полям адреса внутри таблицы order или к копированию адреса?

К тому, что, дойдя до откровенно неудачных последствий, Вы не делаете шаг назад и не задумываетесь - а хорошо ли принятое решение и не стоит ли его поменять.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008394
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

более детально распишите, где тут неудачные последствия
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008397
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77
более детально распишите, где тут неудачные последствия

1. Увеличение трудоёмкости в бизнес-логике, затрагивающей таблицу order
2. Кардинальное (в несколько раз) увеличение размера базы. Его последствия - снижение эффективности кэширования, удорожание бэкапов и т. п.
3. Кардинальное увеличение нагрузки при любой аналитике по адресам.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008411
17-77
3. таблица order (ид - данные заказа - страна - ... - дом) - при выборе адреса пользователем, выбранный адрес копируется в эти поля, иначе если пользователь через год поменяет адрес - то у старых заказов он тоже поменяется

в таблице адресов можно неск.адресов держать, с датами added/closed, и юзать актуальный
а вот это вот всё - сжечь.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008435
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer

1. Увеличение трудоёмкости в бизнес-логике, затрагивающей таблицу order
2. Кардинальное (в несколько раз) увеличение размера базы. Его последствия - снижение эффективности кэширования, удорожание бэкапов и т. п.
3. Кардинальное увеличение нагрузки при любой аналитике по адресам.

Что то вы как то сразу в энтерпрайз все перевели, на сколько я понял речь идет о десятке тысяч заказов в год на ремонт/установку чего нибудь в небольшом городе, в таком раскладе десятилетний прирост объемов потянет любой современный ноутбук. Да и ТС судя по задаваемым вопросам не потянет реализацию логики закрытия адресов и замены изменения/удаления вставкой и закрытием старой записи.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008439
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
17-77
softwarer,

более детально распишите, где тут неудачные последствия

Помимо указанных softwarer-ом, также теряется информация в какой период у пользователя адрес был действующий и когда он его изменил/удалил.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008471
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020

в таблице адресов можно неск.адресов держать, с датами added/closed, и юзать актуальный
а вот это вот всё - сжечь.

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

graycode

Помимо указанных softwarer-ом, также теряется информация в какой период у пользователя адрес был действующий и когда он его изменил/удалил.

в требованиях этого и нет, вы оба додумываете слишком многое, на самом то деле я не предлагаю в своем решении полную историчность адреса - это больше как побочный эффект

softwarer
17-77
более детально распишите, где тут неудачные последствия

1. Увеличение трудоёмкости в бизнес-логике, затрагивающей таблицу order
2. Кардинальное (в несколько раз) увеличение размера базы. Его последствия - снижение эффективности кэширования, удорожание бэкапов и т. п.
3. Кардинальное увеличение нагрузки при любой аналитике по адресам.

ну... может быть...
1. поля адреса никак этому не помешают, вот если будет логика для адресов - тогда возможно, но я ж не знаю что будет и будет ли
2. если адреса все же копировать при использовании - то объем таким же и будет, если же проставлять ссылки и тем самым уменьшим объем - будет ли стоить игра свеч? т.е. тут вопрос не бэкапов, а копируем адреса или нет - это отдельная тема и оба варианта имеют как плюсы так и минусы на уровне бизнес-логики, возможных потенциальных ошибок со стороны пользователей, программистов, объема кода и тестов
3. у нас аналитики пока и нет в требованиях, но я заложил возможность выделить адреса в отдельную таблицу, а там уже можно и дубли убрать если надо, и внешний классификатор прикрутить

в общем это все совершенно не значит, что в случае обнаружения проблем или появления новых требований я не сделаю шага назад
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008481
17-77
можно, но пока что проще копировать


а потом будете переделывать половину проекта.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008485
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза 2020,
не факт
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008576
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном конкретном случае, адрес заказа может быть и таким:
"у ворот казармы в свете фонаря, где кружатся попарно листья сентября ...." (С)
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008577
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
Что то вы как то сразу в энтерпрайз все перевели

Отнюдь. Я назвал очевидные недостатки при отсутствии достоинств. То есть вопрос не в том, что это загнётся когда-нибудь потом, а в "Зачем сразу делать хуже, если это вдобавок требует дополнительных сил"?

graycode
в таком раскладе десятилетний прирост объемов потянет любой современный ноутбук.

Потянет, конечно. И если бы подход, например, давал существенный выигрыш в трудоёмкости - он был бы вполне разумен. Но учитывая, что он даёт проигрыш...

graycode
Да и ТС судя по задаваемым вопросам не потянет реализацию логики закрытия адресов и замены изменения/удаления вставкой и закрытием старой записи.

Да не надо там ничего тянуть. Хватит insert-only таблицы адресов и поля у клиента "текущий адрес" (ну либо без поля, что-нибудь типа "по умолчанию берётся адрес предыдущего заказа").

17-77
1. поля адреса никак этому не помешают,

А вот их некопирование - поможет этого не допустить. Тут, конечно, вопрос, что скрывается за "заказом", но кратное увеличение будет почти в любом случае, кроме, наверное, оптовой закупки продуктов.

17-77
если же проставлять ссылки и тем самым уменьшим объем - будет ли стоить игра свеч?

Наверняка. Потому что кроме объёма БД, это ещё и уменьшает объём работ, а следовательно и количество ошибок.

17-77
у нас аналитики пока и нет в требованиях

Она упоминалась выше. Кроме того, её более чем естественно ожидать. Любой бизнес, переросший Excel, захочет видеть своих клиентов.

17-77
но я заложил возможность выделить адреса в отдельную таблицу

Вы не "заложили возможность". Вы упомянули, что со временем придётся переделать в то, что было проще и дешевле сделать сразу.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008593
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
если это вдобавок требует дополнительных сил?

Что именно при копировании потребует дополнительных сил?

softwarer
Потянет, конечно.

Если бы потянул, то и темы бы этой небыло, с другой стороны пусть учится делать правильно))

softwarer
Да не надо там ничего тянуть. Хватит insert-only таблицы адресов и поля у клиента "текущий адрес" (ну либо без поля, что-нибудь типа "по умолчанию берётся адрес предыдущего заказа").

Флаг - адрес по умолчанию в таблице адресов пользователя.

17-77
и вы упустили требование - указывать произвольный адрес (он не хранится у юзера) или выбирать из списка адресов пользователя

Это легко укладывается в логику closed адресов пользователя, заказ в любом случае делает пользователь, произвольный адрес добавляется в таблицу адресов пользователя для пользователя формирующего заказ и этому адресу сразу после подтверждения заказа проставляется атрибут closed.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008596
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
Что именно при копировании потребует дополнительных сил?

Не только при копировании. Любая операция с адресами в результате потребует перечислять всю портянку полей. При добавлении нового поля и вообще при любом изменении работы с адресами - это изменение потребуется вносить в кучу мест. При этом сто процентов где-то что-то забудут или перепутают, появится бага. И всё это из-за нежелания использовать address_id и не иметь проблем.

graycode
softwarer
Потянет, конечно.

Если бы потянул, то и темы бы этой небыло, с другой стороны пусть учится делать правильно))

Есть ощущение, что Вы успели забыть контекст реплики.

graycode
Флаг - адрес по умолчанию в таблице адресов пользователя.

Cомневаюсь, что это лучшее решение, но можно и так. Это уже мелочи.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008609
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Не только при копировании. Любая операция с адресами в результате потребует перечислять всю портянку полей. При добавлении нового поля и вообще при любом изменении работы с адресами - это изменение потребуется вносить в кучу мест. При этом сто процентов где-то что-то забудут или перепутают, появится бага. И всё это из-за нежелания использовать address_id и не иметь проблем.

В контексте задачи топикстартера заказ после подтверждения неизменен, специфика операций с адресами в данной задаче в большинстве случаев потребует доставать всю портянку полей, так что денормализация вполне приемлема. Добавление нового поля в адреса на самом деле еще не означает что это поле будет обязательно необходимо для заказа, к тому же структура адреса достаточно стабильна и не меняется каждую неделю. Зачем вносить что то в кучу мест, если мы говорим конкретно про заказы? Конечно в общем случае вы правы, но в данной задаче возможен самый примитивный и простой денормализованный вариант, который не требует дополнительных усилий, наоборот упрощает дальнейшую обработку заказа.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008623
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
Добавление нового поля в адреса на самом деле еще не означает что это поле будет обязательно необходимо для заказа

Тогда ещё веселее. В адресе N элементов, из них в заказ нужно скопировать M элементов, в таком-то отчёте сравнивать по K элементам, и при последующем сопровождении нигде не ошибиться.

graycode
к тому же структура адреса достаточно стабильна и не меняется каждую неделю.

А та её часть, которая будет отброшена ибо "пока не надо" - таки постепенно меняется. Здесь, конечно, задача очень малой трудоёмкости, поэтому в принципе на любой вариант можно сказать "легко сделать, не о чем спорить". Но всё же решение "из одних минусов" (с моей точки зрения) меня удивило.

graycode
Зачем вносить что то в кучу мест, если мы говорим конкретно про заказы?

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

graycode
наоборот упрощает дальнейшую обработку заказа.

Чем же он упрощает? Отсутствием join-а?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008635
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Тогда ещё веселее. В адресе N элементов, из них в заказ нужно скопировать M элементов, в таком-то отчёте сравнивать по K элементам, и при последующем сопровождении нигде не ошибиться.

Система - полторы таблицы, зачем сравнивать по K элементам и с чем?

softwarer
А та её часть, которая будет отброшена ибо "пока не надо" - таки постепенно меняется.

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

softwarer
Есть таблица адресов. Есть копирование адреса в заказы. Есть запросы из интерфейса. Есть отчёты, цепляющие адреса. Чем меньше мест и чем проще упоминание в каждом месте - тем проще и надёжнее в сопровождении.

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

softwarer
Чем же он упрощает? Отсутствием join-а?

Отсутствием реализации логики закрытия использовавшихся в заказах адресов, в том случае если их пытаются изменить или удалить и вставки вместо них новых записей адресов.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008720
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а все догнал, в реальности - не пользователь владеет адресом, а условное здание (оно конечно может поменять адрес, или здание можно снести, но это довольно редко)

поэтому берем готовый классификатор, там ид адреса будет строковый и в нем будет закодирована полная инфа об адресе (страна - ... - дом)

проектируемая система и ее пользователи не имеют права менять адрес у здания, могут только использовать:
* в таблице user_address.address_id проставляется ид адреса из классификатора
* в таблице order.address_id так же проставляется ид адреса из классификатора, а не user_address.id

таким образом:
* пользователь когда редактирует свои адреса в таблице user_address - это никак не затрагивает старые заказы
* при создании заказа в order.address_id попадает выбранное значение user_address.address_id из условного выпадающего списка, построенного по таблице user_address для конкретного пользователя
* теряется инфа какие старые адреса были у пользователя - но по идее это пока и не надо, если мы заглянем в старый заказ - то там будет имя клиента и какой-то старый его адрес.
* историчность самого адреса инкапсулируется в классификаторе, т.е. он при обращении всегда нам отдает актуальную версию, но если передать ему ид адреса из старого заказа - то он его распарсит и вернет версию актуальную на тот момент
* при изменении адреса пользователем и если у него есть недоставленные заказы - спросить "а не надо ли поменять в них адреса на новый?"

но проблема со статистикой по районам города - в кладре я не нашел районов, там город - и сразу улица.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008773
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
17-77
а все догнал, в реальности - не пользователь владеет адресом, а условное здание

С точностью до здания. Обычно ещё входят квартира/офис, код домофона и текстовые примечания.

17-77
* в таблице user_address.address_id проставляется ид адреса из классификатора
* в таблице order.address_id так же проставляется ид адреса из классификатора, а не user_address.id

Так, конечно, лучше. Хотя таблица user_address продолжает быть избыточной.

17-77
но проблема со статистикой по районам города - в кладре я не нашел районов, там город - и сразу улица.

Нынче уже в ФИАС логично смотреть.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008914
softwarer
Александр1918
Таблица заказов в последствии будет огромной

Ох эти розовые мечты....

К сожалению в данном случае, это неизбежность.

Dimitry Sibiryakov

Александр1918Аналитические отчеты планируются. По адресам в том числе

Чисто из любопытства: зачем? Что-то типа "на третьей строительной заказов на 3% меньше,
чем на второй, надо туда послать пару людей раскидать рекламу по ящикам"?


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

graycode
softwarer

1. Увеличение трудоёмкости в бизнес-логике, затрагивающей таблицу order
2. Кардинальное (в несколько раз) увеличение размера базы. Его последствия - снижение эффективности кэширования, удорожание бэкапов и т. п.
3. Кардинальное увеличение нагрузки при любой аналитике по адресам.

Что то вы как то сразу в энтерпрайз все перевели, на сколько я понял речь идет о десятке тысяч заказов в год на ремонт/установку чего нибудь в небольшом городе, в таком раскладе десятилетний прирост объемов потянет любой современный ноутбук. Да и ТС судя по задаваемым вопросам не потянет реализацию логики закрытия адресов и замены изменения/удаления вставкой и закрытием старой записи.

В моем случае будут довольно большие объёмы данных. Из старой базы будет перенесено порядка 700к записей заказов + прогнозируемый рост 200 - 250к записей заказов в год. Так что вопрос оптимизации структуры базы актуален.


В процессе анализа добавилось новое требование . У нас есть много улиц которые находятся в 2х и больше районах города. Желательно чтобы при внесении в форму заказа/юзера улицы и дома, автоматически подтягивался район города к которому этот дом относится. Это нужно чтобы правильно определить исполнителя по заказу ( есть отдел/филиал в каждом районе с соответствующим разделением обязанностей ). То есть в базе должен быть справочник домов с привязкой к району. Проблема в том, что на данный момент этих данных нет, но они могут появится в будущем. Базу нужно спроектировать таким образом, чтобы позже безболезненно добавить этот функционал.

С учетом новых требований и вариантов предложенных в этой теме, набросал новую схему.
1. От таблицы полных адресов отказался. Вместо него добавил справочник домов с ID улицы и номером дома (в дальнейшем там может быть ID района).
2. В таблицах заказов и юзеров оставил номер квартиры, подъезда, этаж, и домофон. Эти данные не будут принимать участия в формировании статистики и будут использоваться только 1 раз при выполнении заказа. Тут с некоторым дублированием данных придется смирится ( например, при нескольких заказах из одной квартиры ).
3. У юзера в профиле будет всегда один адрес - его собственный. Это связанно со спецификой задачи, поэтому вариант с вынесением адресов юзера в отдельную таблицу я не рассматривал. При формировании заказа юзер может указать произвольный адрес совершенно никак с ним не связанный (примерно 20-30% случаев).

Из вышеперечисленного следует такая логика работы с адресами в положении: при внесении или изменении значений в полях улицы или номера дома и сохранении формы (заказа или юзера), нужно делать проверку, есть ли в справочнике домов указанный адрес. Если есть, то вносить ID дома в таблицу заказа/юзера, если нет, то создавать новую запись в справочнике домов, а потом вносить ее ID в таблицу соответствующего заказа/юзера.
В таком случае, если удастся получить справочник домов с привязкой к району, то существующий справочник можно будет безболезненно расширить.

Вроде уже выглядит не плохо. Какие на ваш взгляд недостатки могут быть у такого решения?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008918
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918В принципе на производительности системы это не должно сказаться.

Это вопрос не производительности, а эргономики. Не надо без крайней нужды в базу тащить
информацию, которую оператор задолбается вводить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008919
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918
К сожалению в данном случае, это неизбежность.

Нет.

Александр1918
Из старой базы будет перенесено порядка 700к записей заказов + прогнозируемый рост 200 - 250к записей заказов в год.

О чём и речь. Миллион записей был приличным объёмом в начале двухтысячных. Сейчас, когда я делаю пробные примеры на своём ноутбуке - делаю таблички по десять миллионов, иначе всё срабатывает слишком быстро.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40008981
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918,

Берите готовое решение и не мучайтесь.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009039
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр1918,

Вы нарисовали полный трэш. Начинайте не с фантазий, а с процесса, рисуйте сначала процесс и сущности которые в нем участвуют, а не таблицы. На сколько я понял у вас заказчики которые заказывают какую либо услугу, заказчики внутренние корпоративные или внешние? Если внешние, то им очень глубоко фиолетовы все ваши таблицы и id, заказчик хочет заказать услугу, но адреса в вашей системе нет, что ему делать? Отдел НСИ в организации есть?

С номерами домов не все так просто, там есть корпуса, владения, строения и прочее разнообразие, есть человек обязанностью которого будет расфасовка всего этого по районам?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009088
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя...
Я бы взял за основу принцип Али Экспресс:
Всю ответственность за адрес доставки нужно повесить на самого Клиента (с минимальными элементами контроля ввода):
- При регистрации Клиент сам указывает адрес доставки, и их может быть несколько, и один по умолчанию,
соответственно к таблице Клиент вешается таблица Адресов Клиента : ИД_Клиента + Адрес Доставки
- Естественно при оформлении заказа Клиент сам выбирает из списка нужный адрес доставки.
Весь Адрес тупо сливается в строку и одним полем вешается к заказу...
Таким образом если даже Клиент поменяет или удалит адреса, на историю доставленных заказов это не повлияет,
документ заказа останется неизменным...
Дополнительно можно еще в заказ добавить и код Адреса доставки Клиента (вдруг попрет и нужна будет статистика)
Но имхо однозначно Адреса доставки и физически и логически и юридически нужно вешать на Клиента,
куда сцуко закажет, туда и поедет получать, а не так или не туда закажет - так с него и спрос...
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009092
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу отвечаю на возможные детские вопросы:
Если не предполагается отправка почтой или СДЕК ами и вам ванпенисуально что вместо Иванова получит заказ Сидоров, и вы не хотите давать возможность Клиенту сделать подарок любимому человеку (оформив доставку на него) - то паспорт не обязателен
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009093
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
Дополнительно можно еще в заказ добавить и код Адреса доставки Клиента (вдруг попрет и нужна будет статистика)

В таком случае нужно делать логику read only для адресов использованных в заказах, выше было горячее обсуждение быть или не быть копировать или не копировать адрес в заказ))

Но у топикстартера есть желание собирать какую то статистику для заказов по районам и улицам, при этом если улица длинная, то ее дома попадают в разные районы, правда он пока не осознал что заниматься раскидываением строений, владений, домов и их корпусов по районам он буде сам и ручками.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009094
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
Если не предполагается отправка почтой

На сколько я понимаю там не заказы, а заявки на выполнение каких то услуг, отправка сантехника посылкой это конечно интересно, но сомневаюсь что сантехник сильно обрадуется такому способу доставки его бренного тела к месту оказания услуги))
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009095
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

По первой странице вообще не понятно о чем речь, сантехников тоже не наблюдается, но ТС щас забульбенит базу в которой кладра будет тонна, а реальной движухи 2 грамма, я б начал с простой строки адреса чтоб быстро запустить проект и посмотреть выхлоп, я тоже всплакнул по мечтам и грезам... по началу то статистику можно и по умному контексту попробовать поискать
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009135
Stanislav P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поддержу vmag - сделать адрес одной текстовой строкой. В дальнейшем, если нужно будет, то этот адрес можно распарсить и делать с ним, что угодно. Это даёт ещё одно преимущество - можно накопить статистику по тому, как люди записывают адрес и уже на основе этой информации рождать новую версию с таблицами улиц, домов, районов и всего прочего.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009138
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode
В таком случае нужно делать логику read only для адресов использованных в заказах

это ни к чему, при сборе статистики, опять собираем строку и сравниваем со строкой в заказе, если нет совпадения, то и не учитываем в статистике... соответственно если для сбора в статистике нет совпадений в заказах, то по этому адресу ничего и не доставлялось. А если была корректировка неправильного адреса, то она была и там и там, иначе заказ не был бы обработан
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009149
softwarer
Александр1918
К сожалению в данном случае, это неизбежность.

Нет.

Александр1918
Из старой базы будет перенесено порядка 700к записей заказов + прогнозируемый рост 200 - 250к записей заказов в год.

О чём и речь. Миллион записей был приличным объёмом в начале двухтысячных. Сейчас, когда я делаю пробные примеры на своём ноутбуке - делаю таблички по десять миллионов, иначе всё срабатывает слишком быстро.

Значит это мое субъективное. Впервые работаю с базой такого размера.

graycode
Александр1918,
... На сколько я понял у вас заказчики которые заказывают какую либо услугу, заказчики внутренние корпоративные или внешние? Если внешние, то им очень глубоко фиолетовы все ваши таблицы и id, заказчик хочет заказать услугу, но адреса в вашей системе нет, что ему делать?...

Заказчики внешние. Выше я описал предполагаемую логику работы формы адресов.
Александр1918
...При внесении или изменении значений в полях улицы или номера дома и сохранении формы (заказа или юзера), нужно делать проверку, есть ли в справочнике домов указанный адрес. Если есть, то вносить ID дома в таблицу заказа/юзера, если нет, то создавать новую запись в справочнике домов, а потом вносить ее ID в таблицу соответствующего заказа/юзера...

Юзеру будет доступен только справочник улиц. Номер дома он будет вносить вручную, поэтому ситуации с отсутствием адреса пользователя в справочнике не случится.

graycode

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

Справочник домов города с привязкой к районам будет готовится какое-то время отдельно. Само приложение стартует без этого функционала. Но позже его нужно будет добавить. Последняя схема сделана с учетом этого требования. Справочник домов будет наполнятся по мере поступления заказов, а когда будет готов полный справочник с привязкой районов, то из него можно будет взять недостающие дома, а уже существующие связать с районами. Пока не вижу в этом плане ничего ужасного. Я что-то упускаю?
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009197
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр1918Я что-то упускаю?

Выбор из справочника - медленнее прямого ввода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009209
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
опять собираем строку и сравниваем со строкой в заказе

Такой вариант мне совсем не нравится, очень много дополнительных и плохо контролируемых действий включающих не сильно четкую логику парсинга при любых манипуляциях с адресом, потом взяли и изменили формат собираемой строки, а потом еще подкорректировали и т.д...
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009217
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр1918
Заказчики внешние.

Значит обязать пользователя обращаться в отдел НСИ для добавления информации или исправления косяков в нормативно-справочной информации нет, поэтому пользователи сами должны вводить свои адреса, страна и регион из справочников (можно проставлять автоматически используя настройки профиля или геолокацию), населенный пункт уже вводится руками, дальше вообще одна строка улица-строение-квартира, почтовый индекс - отдельное поле.

На счет ничего ужасного, если отдела НСИ и выделенного ответственного человека нет, то актуальность классификатора адресов вы будете поддерживать сами.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009814
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav P
сделать адрес одной текстовой строкой. В дальнейшем, если нужно будет, то этот адрес можно распарсить и делать с ним, что угодно...

Вы когда-то занимались подобной задачей: парсинг адресов?)
Я вот занимался, врагу не пожелаю. Если возможно сразу заполнять отдельно, то лучше это сделать.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009821
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabyteЯ вот занимался, врагу не пожелаю.

Именно поэтому адреса и не надо парсить, а использовать как есть по назначению.

И нет, территориально-географическое деление это не назначение адреса.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009859
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

MegabyteЯ вот занимался, врагу не пожелаю.

Именно поэтому адреса и не надо парсить, а использовать как есть по назначению.

И нет, территориально-географическое деление это не назначение адреса.

Не до конца понимаю ваш комментарий. А как, в вашем случае, делать территориально-географическое деление, если не по адресу?
И что это за данные такие, как называются?

Парсить(разбивать на элементы) или не парсить адрес, думаю, зависит от задачи.

Для моей задачи это было необходимо.
Ко мне и обратились после того, как запустили систему, где поиск был по строке в адресе. Т.е. это была база уже готовых адресов.
Там был поиск по адресу + планировалась различная аналитика в разрезе разных атрибутов адреса: округ, регион, город, улица.
Работа с целым адресом-строкой, во-первых, снижала корректность поиска(каждый пишет, как он хочет), во-вторых, было жутко медленно даже не небольшой.
Про аналитику клиент даже не заикался изначально.
Сложность парсинга была связана с бардаком в данных адреса. Приходилось так же корректировать типовые косяки.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009860
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Именно поэтому адреса и не надо парсить, а использовать как есть по назначению.

Много лет назад мой научный руководитель сказал: "Главное различие между математиком и инженером в том, что математик делает то, что можно, так, как нужно, а инженер делает то, что нужно, так, как можно".
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40009869
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegabyteИ что это за данные такие, как называются?

Так и называются: административно-территориальное деление. Человеческой логике не
поддаётся, поэтому справиться с ним может только специально выделенный бюрократ или модное
нынче "глубокое машинное обучение".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40020702
AlexDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бообще-то ни перво ни второе, вам в самом первом ответе посоветовали почитать про нормализацию данных.
Второе вообще отстой.
Опредилите сначала , что у вас первично , а что вторично. А потом от туда и скачите.
в первом недостаток зачем связь по улицам, это нужно если клиент, имеет несколько адресов, но для этого заведите отдельную таблицу где для клиентов будет таблица адресов доставки.
Если каждый новый адресс клиента как новый клиент регистрироваться будет, то эта связь опять бессмыссленна.
Второй вариант вообще только для отчетов полезен. для системы он вообще как собаке 5 нога.
...
Рейтинг: 0 / 0
Вопрос по проектированию БД
    #40020704
AlexDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще оба варианта сильно извращенные. зачем вам связи через вторичные таблицы, если все ключи в первичных таблицах есть?
...
Рейтинг: 0 / 0
63 сообщений из 63, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вопрос по проектированию БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]