|
|
|
Специфичные данные для роли
|
|||
|---|---|---|---|
|
#18+
Имеется такая ситуация. В системе хранятся зарегистрированные пользователи. Каждый пользователь характеризуется своей ролью, причем ролей может быть более чем одна. Реализовано это связкой таблиц: ПОЛЬЗОВАТЕЛЬ - ПОЛЬЗОВАТЕЛЬ_РОЛЬ - РОЛЬ. Следующее требование - это для определенной роли хранить свою специфическую информацию, скажем для роли БУЛОЧНИК, нужно также сохранять и название булочной где он работает, и адрес и часы работы и средний вес посетителей данной булочной. Число таких ролей и требований для каждой из них известно заранее, причем специфические требования обязаны присутствовать, если зарегистрирован пользователь с такой ролью. Есть идея реализовать это введением отдельной таблицы, где будет хранится эта самая специфическая информация для роли и далее связать эту таблицу с таблицей ПОЛЬЗОВАТЕЛЬ. Если продолжать мой пример, то добавляется таблица БУЛОЧНАЯ с атрибутом НОМЕР_ПОЛЬЗОВАТЕЛЯ. При этом на уровне приложения контролировать, то именно для БУЛОЧНИКА заполняется данная таблица и заполняется ли она вообще. Что-то меня смущает в данном подходе, онако из-за недостатка опыта в проектировании БД, не могу сказать что именно. Возможно, что изначально неверно подхожу в переносе бизнес-требований на модель данных, либо еще что-то. Буду очень благодарен, если кто-то выскажет свои мысли по данному поводу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 19:12 |
|
||
|
Специфичные данные для роли
|
|||
|---|---|---|---|
|
#18+
Это не очень хороший подход, из-за этого При этом на уровне приложения контролировать, то именно для БУЛОЧНИКА заполняется данная таблица и заполняется ли она вообще. Таким образом, Вам нужно делать отдельный кусок кода для роли БУЛОЧНИК. Добавится еще роль - надо будет переписывать приложение. Лучше имхо сделать таблицы АТТРИБУТЫ_РОЛИ, со структрурой (Роль, Атрибут) и ЗНАЧЕНИЯ_АТРИБУТОВ_РОЛИ, со структурой (Пользователь, Атрибут, ЗначениеАтрибута) (для простоты я предполагаю, что все атрибуты имеют тип "строка"). По Вашему примеру, в АТРИБУТЫ_РОЛИ Вы записываете все атрибуты, которые нужно хранить для роли "Булочник" - "Номер булочной" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 16:54 |
|
||
|
Специфичные данные для роли
|
|||
|---|---|---|---|
|
#18+
QazaqqЕсть идея реализовать это введением отдельной таблицы, где будет хранится эта самая специфическая информация для роли и далее связать эту таблицу с таблицей ПОЛЬЗОВАТЕЛЬ. Сугубо в принципе идея здравая, но на практике легко получится стрельба из пушки по воробьям - для одного-двух полей часто уместнее добавить эти поля в таблицу пользователей. Подумайте о том, что "номер булочной" в данном случае не очень удачный подход. Чаще всего такие ситуации рано или поздно требуют введения "многие ко многим" - то есть списка булочных, в которых этот пользователь булочником. В этом случае как раз развязочная таблица становится более чем уместной. В принципе также возможно использовать EAV (универсальную таблицу на все настройки). Это предпочтительно с точки зрения "модуля конфигурирования", в котором можно набросать столь же универсальный интерфейс, но неудобно прикладным модулям, которым вместо естественных sql-инструментов приходится постоянно вызывать хранимки, передавая им "магические имена" атрибутов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 17:12 |
|
||
|
Специфичные данные для роли
|
|||
|---|---|---|---|
|
#18+
>> Кот Матроскин Спасибо. Интересная мысль. Формально, получается, что при таком подходе решаются эти задачи, однако, в данном случае, теряется удобство работы с данными на уровне приложения, если я верно уловил Вашу идею. В любом случае, я заранее знаю список необходимых атрибутов и, соответственно, мне проще работать именно с сущностями (БУЛОЧНАЯ) и их атрибутами (АДРЕС БУЛОЧНОЙ) как неким абстрактным типом, нежели чем просто с набором атрибутов. В предложенном Вами варианте, мне придется в любом случае на уровне приложения, составлять эту самую сущность из атрибутов, что, как мне представляется, не совсем удобно. >> softwarer Спасибо за Ваше мнение. На самом деле, я рассматривал вариант хранения дополнительных полей в таблице ПОЛЬЗОВАТЕЛЬ. Однако, специфичных полей для каждой из роли более чем 10. Хотя в данный момент, мне необходимо отслеживать все лишь 2 роли(потенциально возможно еще 1-2 роли, но маловероятно) мне кажется что это будет не совсем верно. Что касается отношения 'многие-ко-многим', то здесь, да, вы правы - такая ситуация, в принципе, возможна. Требуется дополнительный анализ с моей стороны. Возможно, я не до конца выразил основную идею. Пользователи, зарегистрированные под этими специфичными ролями и будут основными пользователями системы - действующими лицами. Поэтому для них и требуется хранение дополнительной информации, для других ролей - это не принципиально. Т.е. получается. что пользователь с данной ролью и набором дополнительных данных для этой роли и образует основного пользователя данной системы. И скажем, если у пользователя отсутствует данная роль или дополнительная информация, то нет особого смысла и рассматривать его действующее лицо, использующего возможности системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2007, 18:07 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34847903&tid=1544265]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
186ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 502ms |

| 0 / 0 |
