|
|
|
Модель связанных объектов. Проблемы выборки
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38513048&tid=1541028]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 513ms |

| 0 / 0 |

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