|
|
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Есть несколько таблиц, связанных как 1:M. Таблица "А" - справочник пользователей, все последующие - связанные объекты. Таблица "B" содержит поле для связи с "А", таблица "C" - поле связи с "B", и т.д. Чтобы узнать принадлежность объекта типа "C" пользователю (из таблицы "A") придётся найти связанный объект "B", затем перейти к "A". Проблема в том, что уровней "вложенности" объектов будет 5 или 6. В итоге, для выяснения принадлежности объекта "N" пользователю придётся джойнить все таблицы "вверх" до "B". Пример: авторизованный пользователь открывает объект типа "N". Необходимо выяснить наличие прав (принадлежность) открываемого объекта по идентификатору пользователя. Специфика проекта предусматривает частое чтение данных и редкую запись, поэтому есть такая идея: прокинуть поле ссылки на таблицу "A" по всем "подчинённым" таблицам, затем триггером проставлять значения (поднимаясь по всей схеме) при вставке. Есть ли у вас другие варианты решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 09:13 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219Доброго дня! Есть несколько таблиц, связанных как 1:M. Таблица "А" - справочник пользователей, все последующие - связанные объекты. Таблица "B" содержит поле для связи с "А", таблица "C" - поле связи с "B", и т.д. Чтобы узнать принадлежность объекта типа "C" пользователю (из таблицы "A") придётся найти связанный объект "B", затем перейти к "A". Проблема в том, что уровней "вложенности" объектов будет 5 или 6. В итоге, для выяснения принадлежности объекта "N" пользователю придётся джойнить все таблицы "вверх" до "B". Пример: авторизованный пользователь открывает объект типа "N". Необходимо выяснить наличие прав (принадлежность) открываемого объекта по идентификатору пользователя. Специфика проекта предусматривает частое чтение данных и редкую запись, поэтому есть такая идея: прокинуть поле ссылки на таблицу "A" по всем "подчинённым" таблицам, затем триггером проставлять значения (поднимаясь по всей схеме) при вставке. Есть ли у вас другие варианты решения? вы бы понизили уровень абстракции, а то сложно разобраться: A, B, C, N, что куда.... На каком-нибудь житейском примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 10:08 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Максим Н, Легко (просто хотел не напрягать предметной областью): Пользователи - Поставщики - Поставки - Заказы (клиентские) Так вот, пользователь отправляет запрос на открытие карточки клиентского заказа по номеру. Начинаем генерировать список возможных действий над заказом для пользователя. Открыть для просмотра можно только тот заказ, который относится к поставке от поставщика, которого зарегистрировал пользователь. Вот и получается уже два джойна: заказ - поставка и поставка - поставщик. В таблице поставщиков берем идентификатор пользователя (ссылка на родителя) и сверяем с данными авторизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 10:20 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219Есть ли у вас другие варианты решения? Если Ваш сервер позволяет materialized/indexed view - используйте их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 11:06 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, Нет, платформа - MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 11:21 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Чтобы узнать принадлежность объекта типа "C" пользователю (из таблицы "A") придётся найти связанный объект "B", затем перейти к "A". Проблема в том, что уровней "вложенности" объектов будет 5 или 6. В итоге, для выяснения принадлежности объекта "N" пользователю придётся джойнить все таблицы "вверх" до "B". это как раз не страшно. проблема будет если есть тебя условия выборки будут размазаны по несколькими таблицам. а при join ить их потом очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 12:00 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219Есть ли у вас другие варианты решения? Ты как бы чем занимаешься ? БД разрабатываешь ? Вот и разрабатывай, пока про производительность не думай. Потом поглядишь, если будет тормозить, и переделаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 13:05 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Спасибо, Вы правы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 14:12 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219... есть такая идея: прокинуть поле ссылки на таблицу "A" по всем "подчинённым" таблицам, затем триггером проставлять значения (поднимаясь по всей схеме) при вставке. Идея бредовая. Одно дело если пользователей до 100. А если их больше?.. А их будет больше, просто об этом еще никто незнает. Создание правильных индексов значительно облегчает жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 15:51 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Злой Бобр...Идея бредовая. Одно дело если пользователей до 100. А если их больше?.. А их будет больше, просто об этом еще никто незнает... А как на такую схему повлияет количество пользователей? Пользователи добавляются в первую таблицу ("А"), созданные ими объекты записываются в подчинённые таблицы. При этом количество созданных объектов системы (то есть записей в подчинённых таблицах) не велико. А вот чтение из них - очень частая операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 16:17 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219, Может я конечно и несовсем правильно понял (было б немлохо схему посмотреть), но в идее предлагается инсерт (триггером или скриптом - не столь важно) по объектам конкретного пользователя. Т.е. если в системе будет 3 пользователя то максимум одновременного инсерта - 3, если 100 то 100, ... Таким образом чем больше пользователей в системе тем выше шанс увеличения нагрузки при инсертах. Собственно в примере с заказом вполне разумно держать в таблице заказа поле пользователя, а не вытягивать его через ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 16:30 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219, Нужна отдельная таблица соответствия пользователей и объектов (групп объектов). Как ее поддерживать - вопрос отдельный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 17:12 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
_модНужна отдельная таблица соответствия пользователей и объектов (групп объектов). Как ее поддерживать - вопрос отдельный Чем это лучше варианта ТС-а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 18:46 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
На самом деле незная целей и задач, не видя так сказать всей картины - сложно что-то утверждать. Поэтому абсолютно все вышесказанное относится к гаданию на кофейной гуще. Так что или автор попробует "разжевать", или пусть выбирает из "потока" то что ему нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 19:06 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Злой Бобр...автор попробует "разжевать"... Вот часть модели. Особенности такие: - вставка в orders - достаточно редкая операция (около 10 записей в месяц на пользователя). - чтение из orders - операция частая. При этом, авторизованный пользователь (со своим user_id) открывает заказ из orders по order_id. Необходимо проверить принадлежность order к user. Решение: В таблицу orders добавляем поле user_id. Триггер на вставку в таблицу orders находит по указанному purchase_id через provider_id значение user_id и прописывает его в соответствующее поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 07:52 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Это ж сколько у вас тыщ мильенов записей, что нельзя 3-4 таблички заджоинить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 09:22 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин Чем это лучше варианта ТС-а? При изменении прав доступа не надо трогать сами объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 09:42 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219Вот часть модели. Пользователям даются права на провайдеров. Соответственно каждому пользователю д.б. видны только опереации с этим провайдером. Вот и вся нехитрая иерархия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 09:47 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
_модКот Матроскин Чем это лучше варианта ТС-а? При изменении прав доступа не надо трогать сами объекты. У ТС-а это вроде бы не права доступа, а отношения владения. Если владелец обьекта вдруг изменился - нет ничего странного, что ссылка в обьекте изменится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 11:24 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинУ ТС-а это вроде бы не права доступа, а отношения владения. Если владелец обьекта вдруг изменился - нет ничего странного, что ссылка в обьекте изменится. Если так, то это другая задача ( мне не интересная) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 11:37 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин...У ТС-а это вроде бы не права доступа, а отношения владения... Именно так. Кот Матроскин...Если владелец обьекта вдруг изменился - нет ничего странного, что ссылка в обьекте изменится. Владелец объекта не может быть изменён, поэтому нарушения значения поля "user_id" в таблице orders быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 11:38 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Пользователь видит только "своих" поставщиков? С поставщиком может работать только один пользователь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 13:28 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
trayal, Да, именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 14:14 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219Кот Матроскин...У ТС-а это вроде бы не права доступа, а отношения владения... Именно так. Все-таки это именно права доступа, а не просто атрибут объектов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 16:12 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
_мод, это отношение владения, по которому [в том числе] однозначно строятся права доступа. ТС же сказал, владелец у обьекта не меняется вообще никогда, т.е. аргумент При изменении прав доступа не надо трогать сами объекты - не имеет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 16:52 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинэто отношение владения, по которому [в том числе] однозначно строятся права доступа. Я предложил универсальную схему для прав доступа, в которой может меняться все. В реале так и происходит. А ТС просто не может сформулировать задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:00 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
_модКот Матроскинэто отношение владения, по которому [в том числе] однозначно строятся права доступа. Я предложил универсальную схему для прав доступа, в которой может меняться все. Именно поэтому она не явлется хорошим решением для описанного случая - тут не "может меняться все", гибкость решения не приносит пользы, хотя по прежнему за нее надо платить свою цену (в данном случае - дополнительным обьектом базы, дополнительным обьемом данных, дополнительным join'ом в коде, необходимостью проверок "нет ли двух владельцев у обьекта?" и т.п.) Логика "Для того чтобы вскипятить чайник, нужно налить в него воды, включить плиту, поставить чайник и дождаться кипения. Если в чайнике есть вода - выливаем ее и используем универсальное решение" - она плохая, негодная ;) Проектировщик сэкономил свои усилия, и вместо того чтобы подумать над конкретной задачей применил "универсальное решение"(tm), цену которого будут платить разработчики, dba и пользователи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:18 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинИменно поэтому она не явлется хорошим решением для описанного случая Этот случай типовой и решение тоже типовое. Отдельная таблица с индексами по user и объект - самый эффективный способ. Все остальное дороже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 17:51 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
_модКот МатроскинИменно поэтому она не явлется хорошим решением для описанного случая . Отдельная таблица с индексами по user и объект - самый эффективный способ. Все остальное дороже. ээ, эффективный в чем? у меня получилось, (user - ~5К записей, Object ~220k) что запрос Код: sql 1. 2. 3. 4. 5. 6. 7. примерно в полтора раза уступает Код: sql 1. 2. 3. 4. 5. и такая же картинка - при поиске по ObjectID Единственно когда второй запрос проигрывает - когда нет индексов на таблицах object1, object2 (поскольку происходит table scan, и по object2 за счет лишнего поля надо просто больше страниц читать.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 18:44 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, пардон, сорвалось сообщение раньше, не почистил второй запрос с именами таблиц и хинтом- хинт там роли не играет, что с хинтом что без хинта результат одинаковый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 18:47 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219, Блин. Или я туплю или ... А описание модели где? Или это озвученное выше "Пользователи - Поставщики - Поставки - Заказы (клиентские)" ? Если озвученное выше то уберите из providers user_id. Сделайте таблицу providers_user (provider_id, user_id, ...). Можете в нее еще добавить дату начала и дату конца, тогда сможете организовать историю изменения пользователя для данного поставщика. В таблице orders поле purchase_id явно лишнее, можете смело убирать. И если приводите схему то отображайте все элементы таблиц, это избавит от непоняток (в данном случае я непытаюсь угадать что у вас там еще скрыто). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 18:56 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Злой Бобр...Сделайте таблицу providers_user (provider_id, user_id, ...)... Зачем? Если отношение между ними 1-М, зачем мне переходить на М-М? По условию поставщик принадлежит только одному пользователю. И у одного пользователя может быть много собственных (личных) поставщиков. Злой Бобр...В таблице orders поле purchase_id явно лишнее, можете смело убирать... А это зачем? Если по каждой поставке (purchases) может быть ноль или М заказов (orders). В целом картина такова: каждый пользователь системы ведёт собственный каталог поставщиков. По каждому своему поставщику пользователь формирует поставки. По каждой поставке может быть сформировано М заказов. Злой Бобр...И если приводите схему то отображайте все элементы таблиц, это избавит от непоняток (в данном случае я непытаюсь угадать что у вас там еще скрыто). Скрыты атрибуты, не имеющие отношения к вопросу. Свойства пользователя, поставщика и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 08:19 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин При условии: По условию поставщик принадлежит только одному пользователю вы правы. Но условие сомнительное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 09:29 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
_мод...Но условие сомнительное :)... Согласен. Вообще система достаточно специфична. Именно поэтому и старался здесь абстрагироваться от предметной области, с таблицами A, B, C ... N. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 09:43 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219 Вообще система достаточно специфична. Такие системы крайняя редкость. Не думаю, что ваша к ним принадлежит. Поэтому и нужно применять типовые решения. зы Как правило, юзер, создавший объект, фиксируется в аудите. Этим можно воспользоваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 10:37 |
|
||
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#18+
sender219Злой Бобр...Сделайте таблицу providers_user (provider_id, user_id, ...)... Зачем? Если отношение между ними 1-М, зачем мне переходить на М-М? По условию поставщик принадлежит только одному пользователю. И у одного пользователя может быть много собственных (личных) поставщиков. Зачем - я написал выше (что б видеть историю если у поставщика меняется пользователь). Но если вас устраивает что при изменении пользователя вы тупо перепишите поля таблицы (вместо Петров напишете в ФИО Сидоров) - невопрос, это ваша кухня и вам там рулить. Если считаете что пользователь будет жить вечно - это тоже ваше дело. Я вовсе не претендую на мнение последней инстанции. Все что тут пишется носит лишь рекомендательный характер. Конечный выбор за вами. sender219Злой Бобр...В таблице orders поле purchase_id явно лишнее, можете смело убирать... А это зачем? Если по каждой поставке (purchases) может быть ноль или М заказов (orders). В целом картина такова: каждый пользователь системы ведёт собственный каталог поставщиков. По каждому своему поставщику пользователь формирует поставки. По каждой поставке может быть сформировано М заказов. Ну тогда я неправильно понял смысл поставки. У вас это оказывается сводный заказ по клиентам, а я "телепартировал" что это аналог Партии. Увы, отсутствие описания дает подобные казусы. sender219Злой Бобр...И если приводите схему то отображайте все элементы таблиц, это избавит от непоняток (в данном случае я непытаюсь угадать что у вас там еще скрыто). Скрыты атрибуты, не имеющие отношения к вопросу. Свойства пользователя, поставщика и т.д. Опять же это лишь рекомендация. Хотите удивляться почему вам рекомендуют то что явно невписывается в вашу задачу - можете и дальше вырывать куски из контекста, а мы будем "телепартировать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 16:08 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1541028]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 196ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...