Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Модель связанных объектов. Проблемы выборки / 25 сообщений из 36, страница 1 из 2
25.12.2013, 09:13
    #38511739
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Доброго дня!

Есть несколько таблиц, связанных как 1:M. Таблица "А" - справочник пользователей, все последующие - связанные объекты. Таблица "B" содержит поле для связи с "А", таблица "C" - поле связи с "B", и т.д.

Чтобы узнать принадлежность объекта типа "C" пользователю (из таблицы "A") придётся найти связанный объект "B", затем перейти к "A". Проблема в том, что уровней "вложенности" объектов будет 5 или 6. В итоге, для выяснения принадлежности объекта "N" пользователю придётся джойнить все таблицы "вверх" до "B".
Пример: авторизованный пользователь открывает объект типа "N". Необходимо выяснить наличие прав (принадлежность) открываемого объекта по идентификатору пользователя.

Специфика проекта предусматривает частое чтение данных и редкую запись, поэтому есть такая идея: прокинуть поле ссылки на таблицу "A" по всем "подчинённым" таблицам, затем триггером проставлять значения (поднимаясь по всей схеме) при вставке.

Есть ли у вас другие варианты решения?
...
Рейтинг: 0 / 0
25.12.2013, 10:08
    #38511767
Максим Н
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219Доброго дня!

Есть несколько таблиц, связанных как 1:M. Таблица "А" - справочник пользователей, все последующие - связанные объекты. Таблица "B" содержит поле для связи с "А", таблица "C" - поле связи с "B", и т.д.

Чтобы узнать принадлежность объекта типа "C" пользователю (из таблицы "A") придётся найти связанный объект "B", затем перейти к "A". Проблема в том, что уровней "вложенности" объектов будет 5 или 6. В итоге, для выяснения принадлежности объекта "N" пользователю придётся джойнить все таблицы "вверх" до "B".
Пример: авторизованный пользователь открывает объект типа "N". Необходимо выяснить наличие прав (принадлежность) открываемого объекта по идентификатору пользователя.

Специфика проекта предусматривает частое чтение данных и редкую запись, поэтому есть такая идея: прокинуть поле ссылки на таблицу "A" по всем "подчинённым" таблицам, затем триггером проставлять значения (поднимаясь по всей схеме) при вставке.

Есть ли у вас другие варианты решения?

вы бы понизили уровень абстракции, а то сложно разобраться: A, B, C, N, что куда....
На каком-нибудь житейском примере.
...
Рейтинг: 0 / 0
25.12.2013, 10:20
    #38511771
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Максим Н,

Легко (просто хотел не напрягать предметной областью):

Пользователи - Поставщики - Поставки - Заказы (клиентские)

Так вот, пользователь отправляет запрос на открытие карточки клиентского заказа по номеру. Начинаем генерировать список возможных действий над заказом для пользователя. Открыть для просмотра можно только тот заказ, который относится к поставке от поставщика, которого зарегистрировал пользователь. Вот и получается уже два джойна: заказ - поставка и поставка - поставщик. В таблице поставщиков берем идентификатор пользователя (ссылка на родителя) и сверяем с данными авторизации.
...
Рейтинг: 0 / 0
25.12.2013, 11:06
    #38511807
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219Есть ли у вас другие варианты решения?

Если Ваш сервер позволяет materialized/indexed view - используйте их.
...
Рейтинг: 0 / 0
25.12.2013, 11:21
    #38511816
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Кот Матроскин,

Нет, платформа - MySQL
...
Рейтинг: 0 / 0
25.12.2013, 12:00
    #38511893
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Чтобы узнать принадлежность объекта типа "C" пользователю (из таблицы "A") придётся найти связанный объект "B", затем перейти к "A". Проблема в том, что уровней "вложенности" объектов будет 5 или 6. В итоге, для выяснения принадлежности объекта "N" пользователю придётся джойнить все таблицы "вверх" до "B".




это как раз не страшно.



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

а при join ить их потом очень просто.
...
Рейтинг: 0 / 0
25.12.2013, 13:05
    #38512009
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219Есть ли у вас другие варианты решения?

Ты как бы чем занимаешься ? БД разрабатываешь ?
Вот и разрабатывай, пока про производительность не думай.
Потом поглядишь, если будет тормозить, и переделаешь.
...
Рейтинг: 0 / 0
25.12.2013, 14:12
    #38512144
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
MasterZiv,

Спасибо, Вы правы.
...
Рейтинг: 0 / 0
25.12.2013, 15:51
    #38512264
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219... есть такая идея: прокинуть поле ссылки на таблицу "A" по всем "подчинённым" таблицам, затем триггером проставлять значения (поднимаясь по всей схеме) при вставке.
Идея бредовая. Одно дело если пользователей до 100. А если их больше?.. А их будет больше, просто об этом еще никто незнает.
Создание правильных индексов значительно облегчает жизнь.
...
Рейтинг: 0 / 0
25.12.2013, 16:17
    #38512307
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Злой Бобр...Идея бредовая. Одно дело если пользователей до 100. А если их больше?.. А их будет больше, просто об этом еще никто незнает...
А как на такую схему повлияет количество пользователей? Пользователи добавляются в первую таблицу ("А"), созданные ими объекты записываются в подчинённые таблицы. При этом количество созданных объектов системы (то есть записей в подчинённых таблицах) не велико. А вот чтение из них - очень частая операция.
...
Рейтинг: 0 / 0
25.12.2013, 16:30
    #38512318
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219,

Может я конечно и несовсем правильно понял (было б немлохо схему посмотреть), но в идее предлагается инсерт (триггером или скриптом - не столь важно) по объектам конкретного пользователя. Т.е. если в системе будет 3 пользователя то максимум одновременного инсерта - 3, если 100 то 100, ... Таким образом чем больше пользователей в системе тем выше шанс увеличения нагрузки при инсертах.
Собственно в примере с заказом вполне разумно держать в таблице заказа поле пользователя, а не вытягивать его через ...
...
Рейтинг: 0 / 0
25.12.2013, 17:12
    #38512370
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219,
Нужна отдельная таблица соответствия пользователей и объектов (групп объектов). Как ее поддерживать - вопрос отдельный
...
Рейтинг: 0 / 0
25.12.2013, 18:46
    #38512450
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
_модНужна отдельная таблица соответствия пользователей и объектов (групп объектов). Как ее поддерживать - вопрос отдельный
Чем это лучше варианта ТС-а?
...
Рейтинг: 0 / 0
25.12.2013, 19:06
    #38512465
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
На самом деле незная целей и задач, не видя так сказать всей картины - сложно что-то утверждать. Поэтому абсолютно все вышесказанное относится к гаданию на кофейной гуще. Так что или автор попробует "разжевать", или пусть выбирает из "потока" то что ему нужно.
...
Рейтинг: 0 / 0
26.12.2013, 07:52
    #38512754
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Злой Бобр...автор попробует "разжевать"...
Вот часть модели.

Особенности такие:
- вставка в orders - достаточно редкая операция (около 10 записей в месяц на пользователя).
- чтение из orders - операция частая. При этом, авторизованный пользователь (со своим user_id) открывает заказ из orders по order_id. Необходимо проверить принадлежность order к user.

Решение:
В таблицу orders добавляем поле user_id. Триггер на вставку в таблицу orders находит по указанному purchase_id через provider_id значение user_id и прописывает его в соответствующее поле.
...
Рейтинг: 0 / 0
26.12.2013, 09:22
    #38512789
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Это ж сколько у вас тыщ мильенов записей, что нельзя 3-4 таблички заджоинить ?
...
Рейтинг: 0 / 0
26.12.2013, 09:42
    #38512800
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Кот Матроскин Чем это лучше варианта ТС-а?
При изменении прав доступа не надо трогать сами объекты.
...
Рейтинг: 0 / 0
26.12.2013, 09:47
    #38512806
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219Вот часть модели.
Пользователям даются права на провайдеров. Соответственно каждому пользователю д.б. видны только опереации с этим провайдером. Вот и вся нехитрая иерархия.
...
Рейтинг: 0 / 0
26.12.2013, 11:24
    #38512882
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
_модКот Матроскин Чем это лучше варианта ТС-а?
При изменении прав доступа не надо трогать сами объекты.

У ТС-а это вроде бы не права доступа, а отношения владения. Если владелец обьекта вдруг изменился - нет ничего странного, что ссылка в обьекте изменится.
...
Рейтинг: 0 / 0
26.12.2013, 11:37
    #38512898
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Кот МатроскинУ ТС-а это вроде бы не права доступа, а отношения владения. Если владелец обьекта вдруг изменился - нет ничего странного, что ссылка в обьекте изменится.
Если так, то это другая задача ( мне не интересная)
...
Рейтинг: 0 / 0
26.12.2013, 11:38
    #38512899
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Кот Матроскин...У ТС-а это вроде бы не права доступа, а отношения владения...
Именно так.
Кот Матроскин...Если владелец обьекта вдруг изменился - нет ничего странного, что ссылка в обьекте изменится.
Владелец объекта не может быть изменён, поэтому нарушения значения поля "user_id" в таблице orders быть не может.
...
Рейтинг: 0 / 0
26.12.2013, 13:28
    #38513048
trayal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
Пользователь видит только "своих" поставщиков?
С поставщиком может работать только один пользователь?
...
Рейтинг: 0 / 0
26.12.2013, 14:14
    #38513134
sender219
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
trayal,

Да, именно так.
...
Рейтинг: 0 / 0
26.12.2013, 16:12
    #38513336
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
sender219Кот Матроскин...У ТС-а это вроде бы не права доступа, а отношения владения...
Именно так.

Все-таки это именно права доступа, а не просто атрибут объектов
...
Рейтинг: 0 / 0
26.12.2013, 16:52
    #38513399
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель связанных объектов. Проблемы выборки
_мод,
это отношение владения, по которому [в том числе] однозначно строятся права доступа.

ТС же сказал, владелец у обьекта не меняется вообще никогда, т.е. аргумент
При изменении прав доступа не надо трогать сами объекты
- не имеет смысла.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Модель связанных объектов. Проблемы выборки / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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