powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Специфичные данные для роли
4 сообщений из 4, страница 1 из 1
Специфичные данные для роли
    #34847903
Qazaqq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется такая ситуация.

В системе хранятся зарегистрированные пользователи. Каждый пользователь характеризуется своей ролью, причем ролей может быть более чем одна. Реализовано это связкой таблиц: ПОЛЬЗОВАТЕЛЬ - ПОЛЬЗОВАТЕЛЬ_РОЛЬ - РОЛЬ.

Следующее требование - это для определенной роли хранить свою специфическую информацию, скажем для роли БУЛОЧНИК, нужно также сохранять и название булочной где он работает, и адрес и часы работы и средний вес посетителей данной булочной.
Число таких ролей и требований для каждой из них известно заранее, причем специфические требования обязаны присутствовать, если зарегистрирован пользователь с такой ролью.

Есть идея реализовать это введением отдельной таблицы, где будет хранится эта самая специфическая информация для роли и далее связать эту таблицу с таблицей ПОЛЬЗОВАТЕЛЬ.
Если продолжать мой пример, то добавляется таблица БУЛОЧНАЯ с атрибутом НОМЕР_ПОЛЬЗОВАТЕЛЯ.
При этом на уровне приложения контролировать, то именно для БУЛОЧНИКА заполняется данная таблица и заполняется ли она вообще.

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

При этом на уровне приложения контролировать, то именно для БУЛОЧНИКА заполняется данная таблица и заполняется ли она вообще.

Таким образом, Вам нужно делать отдельный кусок кода для роли БУЛОЧНИК. Добавится еще роль - надо будет переписывать приложение.
Лучше имхо сделать таблицы АТТРИБУТЫ_РОЛИ, со структрурой (Роль, Атрибут)
и ЗНАЧЕНИЯ_АТРИБУТОВ_РОЛИ, со структурой (Пользователь, Атрибут, ЗначениеАтрибута) (для простоты я предполагаю, что все атрибуты имеют тип "строка").
По Вашему примеру, в АТРИБУТЫ_РОЛИ Вы записываете все атрибуты, которые нужно хранить для роли "Булочник" - "Номер булочной"
...
Рейтинг: 0 / 0
Специфичные данные для роли
    #34850788
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QazaqqЕсть идея реализовать это введением отдельной таблицы, где будет хранится эта самая специфическая информация для роли и далее связать эту таблицу с таблицей ПОЛЬЗОВАТЕЛЬ.
Сугубо в принципе идея здравая, но на практике легко получится стрельба из пушки по воробьям - для одного-двух полей часто уместнее добавить эти поля в таблицу пользователей.

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

В принципе также возможно использовать EAV (универсальную таблицу на все настройки). Это предпочтительно с точки зрения "модуля конфигурирования", в котором можно набросать столь же универсальный интерфейс, но неудобно прикладным модулям, которым вместо естественных sql-инструментов приходится постоянно вызывать хранимки, передавая им "магические имена" атрибутов.
...
Рейтинг: 0 / 0
Специфичные данные для роли
    #34851001
Qazaqq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>> Кот Матроскин
Спасибо. Интересная мысль.

Формально, получается, что при таком подходе решаются эти задачи, однако, в данном случае, теряется удобство работы с данными на уровне приложения, если я верно уловил Вашу идею.
В любом случае, я заранее знаю список необходимых атрибутов и, соответственно, мне проще работать именно с сущностями (БУЛОЧНАЯ) и их атрибутами (АДРЕС БУЛОЧНОЙ) как неким абстрактным типом, нежели чем просто с набором атрибутов.
В предложенном Вами варианте, мне придется в любом случае на уровне приложения, составлять эту самую сущность из атрибутов, что, как мне представляется, не совсем удобно.

>> softwarer
Спасибо за Ваше мнение.

На самом деле, я рассматривал вариант хранения дополнительных полей в таблице ПОЛЬЗОВАТЕЛЬ. Однако, специфичных полей для каждой из роли более чем 10. Хотя в данный момент, мне необходимо отслеживать все лишь 2 роли(потенциально возможно еще 1-2 роли, но маловероятно) мне кажется что это будет не совсем верно.

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

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

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

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


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