powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Исключения из правил
32 сообщений из 32, показаны все 2 страниц
Исключения из правил
    #36905583
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда приходится сталкиваться с такими ситуациями, что описал предметную область сущностями, спроектировал таблицы, и тут выясняется, что буквально одна-две строки (объектов предметной области) немного вылезает за принятые упрощения. Вроде бы и игнорировать это нельзя, но и "всеобщую теорию всего" ради мелочи в схему базы вгонять не хочется.


Для определенности, пример. Описываем схему государственного документооборота племени Мумба-Юмба. Три таблицы: документ, тип документа (закон, постановление, приказ, решение, письмо...), и издатель документа (вождь, совет племени, шаман, палач, казначей).

Все бы замечательно, но выясняется: Закон может издать только Вождь. Все остальные типы документов - кто угодно. Но может выяснится что-то еще подобное.

Требуется:
1. Обеспечить непротиворечивость данных в таблице документов, чтобы не прошел Закон от Шамана.
2. В интерфейсе при редактировании и выборе документа по типу и издателю, при выборе "Закон", пользователю должен быть доступен исключительно Вождь.

Напрашиваются решения:

1. В лоб, декларативно. Поскольку выяснилась зависимость типа документа от издателя, делаем таблицу "Допустимые типы документов от издателей", со ссылками на тип и издателя, а документ будет ссылаться уже на эту таблицу.

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

2. Чисто процедурно: вешаем триггер на Документ, разрешающий сохранение Законов только от Вождя, и в формах выбора документа вшиваем код "Если в комбобоксТип выбран ЗаконИд, то комбобоксИздатель := ВождьИд и комбобоксИздатель.Disable".

Недостаток - размазывание декларативного по сути ограничения по коду, с константами данных, вшитыми в код. У меня на это некоторая аллергия.


Интересен опыт: сталкивались ли вы с подобными случаями, и как обходили?
...
Рейтинг: 0 / 0
Исключения из правил
    #36905681
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherИногда приходится сталкиваться с такими ситуациями, что описал предметную область сущностями, спроектировал таблицы, и тут выясняется, что буквально одна-две строки (объектов предметной области) немного вылезает за принятые упрощения. Вроде бы и игнорировать это нельзя, но и "всеобщую теорию всего" ради мелочи в схему базы вгонять не хочется.


Для определенности, пример. Описываем схему государственного документооборота племени Мумба-Юмба. Три таблицы: документ, тип документа (закон, постановление, приказ, решение, письмо...), и издатель документа (вождь, совет племени, шаман, палач, казначей).

Все бы замечательно, но выясняется: Закон может издать только Вождь. Все остальные типы документов - кто угодно. Но может выяснится что-то еще подобное.

Требуется:
1. Обеспечить непротиворечивость данных в таблице документов, чтобы не прошел Закон от Шамана.
2. В интерфейсе при редактировании и выборе документа по типу и издателю, при выборе "Закон", пользователю должен быть доступен исключительно Вождь.

Напрашиваются решения:

1. В лоб, декларативно. Поскольку выяснилась зависимость типа документа от издателя, делаем таблицу "Допустимые типы документов от издателей", со ссылками на тип и издателя, а документ будет ссылаться уже на эту таблицу.

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

А что, так много типов и издателей, что это может вызвать неудобство ?

Cane Cat Fisher
2. Чисто процедурно: вешаем триггер на Документ, разрешающий сохранение Законов только от Вождя, и в формах выбора документа вшиваем код "Если в комбобоксТип выбран ЗаконИд, то комбобоксИздатель := ВождьИд и комбобоксИздатель.Disable".

Недостаток - размазывание декларативного по сути ограничения по коду, с константами данных, вшитыми в код. У меня на это некоторая аллергия.

Интересен опыт: сталкивались ли вы с подобными случаями, и как обходили?

Я в такой ситуации однозначно выбираю решение (1) (декларативное), потому что:

1. Декларативное в общем лучше процедурного (триггер).
2. Если нужно изменить правила, то в случае (1) нужно изменить данные в таблице, а в случае (2) изменить код триггера и перекомпилировать его. (1) может сделать и пользователь, а (2) только программист, поэтому решение (1) дешевле.
...
Рейтинг: 0 / 0
Исключения из правил
    #36905703
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предлагаю первый вариант в модификации:
"Допустимые типы документов от издателей"
если нет в ней ни одной записи с данным типом документа, то разрешено всем, если есть, то только тем о ком есть запись
...
Рейтинг: 0 / 0
Исключения из правил
    #36905796
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможен промежуточный вариант - создать таблицу правил и процедурно (триггером в сложных случаях не получится, так что либо в ХП, либо на клиенте) при внесении изменений по ней проверять, возможны ли такие изменения или нет (в случае, если нет, то должно быть выдано некое сообщение с объяснением "почему так нельзя").
...
Рейтинг: 0 / 0
Исключения из правил
    #36905809
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вариант 1 работает только в случае неуменьшения прав с течением времени.
Например, запретит Вождь Палачу выдавать справки о смерти, а разрешит только наблюдающему за казнью Шаману. А старые-то справки, выданные Палачом, в системе должны остаться.

P.S. примерчик у топикстартера весьма живописный
...
Рейтинг: 0 / 0
Исключения из правил
    #36905920
Flying Dutchman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftКстати, вариант 1 работает только в случае неуменьшения прав с течением времени.
Например, запретит Вождь Палачу выдавать справки о смерти, а разрешит только наблюдающему за казнью Шаману. А старые-то справки, выданные Палачом, в системе должны остаться.


Можно в таблицу, где хранятся права, добавить еще одну колонку, показывающую, активно ли это право или нет. В этом случае на клиенте можно показывать только список активных в данный момент прав и пользователь может выбирать только из него. (Конечно, это не защитит базу данных от использования старых правил другим путем, например, вследствие изменения данных какой-нибудь автоматизированной процедурой).
...
Рейтинг: 0 / 0
Исключения из правил
    #36905933
Kew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher
1. В лоб, декларативно. Поскольку выяснилась зависимость типа документа от издателя, делаем таблицу "Допустимые типы документов от издателей", со ссылками на тип и издателя
Я бы, скорее, выбрал этот вариант ("всякое исключение из правил есть частный случай правила более общего" :) )

Cane Cat Fisherа документ будет ссылаться уже на эту таблицу. А это лучше не делать. Таблицы с данными лучше себя чувствуют отдельно от таблиц с метаданными (разрешениями).

Cane Cat Fisherочень неудобно: эта таблица практически будет декартовым произведением всех типов и издателей
Вероятно, ее нужно будет заполнить только один раз? Если у должностей Шаман, Вождь и проч. что-то часто меняется, можно попробовать выделить <i>роли</i> ("Издатель законов", "Издатель подзаконных актов", "Издатель приказов и распоряжений"...) и назначать их?
...
Рейтинг: 0 / 0
Исключения из правил
    #36906016
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 18.10.2010 17:19, Cane Cat Fisher wrote:

> Все бы замечательно, но выясняется: Закон может издать только Вождь. Все
> остальные типы документов - кто угодно. Но может выяснится что-то еще подобное.

Это типичные business rules, они же -- бизнес-правила.
Чаще всего не влияют на схему данных и реализуются логикой приложения,
лучше всего в БД, с помощью правил, триггеров, процедур.

> Недостаток - размазывание декларативного по сути ограничения по коду, с
> константами данных, вшитыми в код. У меня на это некоторая аллергия.
> Интересен опыт: сталкивались ли вы с подобными случаями, и как обходили?

Так это сплош и рядом встречается в БД, чего у тебя аллергия -- не
понятно. Сделал триггер и забыл.
А в решении чисто на данных проблем ещё больше -- если добавляются
новые виды людей и документов -- надо добавлять разрешительные
записи для всех них. А как понимать, что можно разрешать, а что нет ?
О, пишем триггер и процедуру с правилами. А на кой мы тогда данные
храним, елси всё равно надо триггер или процедуру писать ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Исключения из правил
    #36906123
Senya_L_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flying Dutchman1. Декларативное в общем лучше процедурного (триггер).А чем? И самое интересное - все ли можно "задекларировать"?Flying Dutchman2. Если нужно изменить правила, то в случае (1) нужно изменить данные в таблице, а в случае (2) изменить код триггера и перекомпилировать его. (1) может сделать и пользователь, а (2) только программист, поэтому решение (1) дешевле.Дешевизна решения (1) под большим вопросом.
К тому же как быть, если новое правило напрочь перечеркивает старое? Если уж начали про племя Мумба-Юмба... Хотя на это уже указывал miksoftmiksoftКстати, вариант 1 работает только в случае неуменьшения прав с течением времени.
Например, запретит Вождь Палачу выдавать справки о смерти, а разрешит только наблюдающему за казнью Шаману. А старые-то справки, выданные Палачом, в системе должны остаться.
KewCane Cat Fisherочень неудобно: эта таблица практически будет декартовым произведением всех типов и издателей
Вероятно, ее нужно будет заполнить только один раз? Если у должностей Шаман, Вождь и проч. что-то часто меняется, можно попробовать выделить <i>роли</i> ("Издатель законов", "Издатель подзаконных актов", "Издатель приказов и распоряжений"...) и назначать их?А проверять будем... да! конечно же программно - в ХП или в триггере ;)

Имхо, пожалуй, самая здравая идея. К тому же изобретать придется поменьше: ACL и другие схемы разграничения доступа уже разработаны.
...
Рейтинг: 0 / 0
Исключения из правил
    #36906434
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a клиент-то что-ли тонкий, только ХП дергает с сервера? Если толстый, то вся подобная бизнес-логика должна быть в доменной модели
...
Рейтинг: 0 / 0
Исключения из правил
    #36906511
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher Закон может издать только Вождь. Все остальные типы документов - кто угодноТо есть вам нужно засунуть куда-нибудь этот кусок кода типа функции проверки(ИдТипаДокумента,ИдИздателя).
Код: plaintext
1.
2.
Если тип документа не имеет флаг - "ЗАКОН" то ОК
 иначе если издатель имеет флаг "ВОЖДЬ" то ОК
 иначе ВСЕ_ПЛОХО
Возможно ваша субд позволяет использовать пользовательскую функцию в check ограничении, если нет то засовывайте этот код в табличный триггер.
Причем вы также можете (должны) реализовать это на клиенте (например дергая функцию из приложения), чтобы не напрягать пользователя красными окошками (в случае check оно еще требует специального кода для перехвата, а то сообщение будет совсем нечитабельное типа check constraint_vozhd_zakon is violated)
Таким образом код сам по себе будет жить в одном месте, во всех местах программы будет только ссылка на него, пользователи могут рулить флагами как хотят.
...
Рейтинг: 0 / 0
Исключения из правил
    #36906531
Фотография Taper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если всех пускать в базу только через хранимые процедуры и функции, то тут же можно и проверять сколь угодно сложную бизнес логику - можно только членам племени, у которых имя начинается на букву А и они ростом не выше 170 см.
Но все же основные изменения нужно вносить видимо и в структуру БД, потому что в ином случае обвес бизнес-логики на программируемой части будет слишком велик и может потопить систему.
...
Рейтинг: 0 / 0
Исключения из правил
    #36906984
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, попытаюсь объяснить, почему у меня аллергия на процедуры с вшитыми дата-константами.

Пусть мы внедрили систему на острове Мумба-Юмба. Но заинтересовался соседний остров Чунга-Чанга - и мы хотим такое; только бизнес-правила у нас немного другие: у нас есть тип документа "Решение суда", и издавать его могут только издатели "Перцовый суд", "Крапивный суд" и "Высший Колповный суд".

Отбросив навязчивые мысли об особенностях туземного правосудия, сделаем вывод: придется переписать и серверную процедуру, проверяющую данные при сохранении, и клиентский кусочек, "образумливающий" интефейс при выборе типов-издателей. То есть вести отдельную серверную и клиентскую части для каждого острова. И не дай Бог перепутать - претензии рассматриваются в судах заказчика!!!

А в случае с таблицами - просто меняем содержимое настроечной таблицы.

Мне больше всего понравилась идея от Naf -

Naf первый вариант в модификации:
"Допустимые типы документов от издателей"
если нет в ней ни одной записи с данным типом документа, то разрешено всем, если есть, то только тем о ком есть запись

Другими словами - таблица "Допустимые издатели для документов с ограниченным набором издателей".

Преимущества:

Во-первых, она не будет декартовым произведением всех дозволенных комбинаций, а будет небольшой и обозримой: одна запись "Закон-Вождь" для Мумба-Юмба, три записи с судами для Чунга-Чанга.

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

И совершенно справедливое замечание miksoft о превратности суетности и изменчивости бизнес-правил во времени, мне кажется, красивее учесть введением дат актуальности в таблицах, как мудро указывал нам Flying Dutchman, чем синхронными CASE-изгородями в клиентском и серверном коде.
...
Рейтинг: 0 / 0
Исключения из правил
    #36907026
Фотография Taper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher, для данного, конкретного случая может быть и да. Если верно понял, изначально вопрос ставился в общем плане. Данный частный случай имхо не может служить общей характеристикой методов.
...
Рейтинг: 0 / 0
Исключения из правил
    #36907150
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 19.10.2010 12:23, Cane Cat Fisher wrote:

> Пусть мы внедрили систему на острове Мумба-Юмба. Но заинтересовался соседний
> остров Чунга-Чанга - и мы хотим такое; только бизнес-правила у нас немного
> другие: у нас есть тип документа "Решение суда", и издавать его могут только
> издатели "Перцовый суд", "Крапивный суд" и "Высший Колповный суд".

Ну всё правильно ты мыслишь, только учти и проблемы, возникающие при твоём чисто
на данных решении, о которых я тебе писал. А Бизнес-правила тоже можно
настраивать метаданными и настройками. Главное просто понять, что в данном
конкретном случае проще делать. В случаях как ты описал, где правила
формулируются в стиле исключений, думаю, больше поднодит реализация в виде
БЛ, кодом, в случаях, когда правила применяются всегда и для каждого случая --
лучше данными, естественно.


> Отбросив навязчивые мысли об особенностях туземного правосудия, сделаем вывод:
> придется переписать и серверную процедуру, проверяющую данные при сохранении, и
> клиентский кусочек, "образумливающий" интефейс при выборе типов-издателей. То

Да нет, достаточно её просто настраивать. Метаданными.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Исключения из правил
    #36907881
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Пусть мы внедрили систему на острове Мумба-Юмба. Но заинтересовался соседний остров Чунга-Чанга

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

Жаль, что вы ничего не слышали об административном и административно-территориальном делении, жаль, что вы ничего не слышали о маршрутах, контурах и шаблонах. Не удивляет, что в оценке количества необходимых таблиц вы ошиблись на пару-тройку порядков.
...
Рейтинг: 0 / 0
Исключения из правил
    #36908194
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher Пусть мы внедрили систему на острове Мумба-Юмба. Но заинтересовался соседний остров Чунга-Чанга - и мы хотим такое; только бизнес-правила у нас немного другие: у нас есть тип документа "Решение суда", и издавать его могут только издатели "Перцовый суд", "Крапивный суд" и "Высший Колповный суд".Проставите флажки в нужных типах документа. В худшем случае (если придется лазить по другим таблицам обновите проверяющую функцию)

Cane Cat Fisher Отбросив навязчивые мысли об особенностях туземного правосудия, сделаем вывод: придется переписать и серверную процедуру, проверяющую данные при сохранении, и клиентский кусочек, "образумливающий" интефейс при выборе типов-издателей. Клиентский кусочек переписывать не нужно.
...
Рейтинг: 0 / 0
Исключения из правил
    #36908966
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 Не удивляет, что в оценке количества необходимых таблиц вы ошиблись на пару-тройку порядков.

А что, для государственного документооборота еще какие-то таблицы нужны? Мне об этом ничего не сказали...
...
Рейтинг: 0 / 0
Исключения из правил
    #36909243
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А что, для государственного документооборота еще какие-то таблицы нужны?

Для любого документооборота.

> Мне об этом ничего не сказали...

Значит, задачи вам формулируют бараны.
...
Рейтинг: 0 / 0
Исключения из правил
    #36909398
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

Вы все правильно понимаете. Делайте таблицу с разрешенными документами для издателя - это и теоретически и практически правильно, хотя понятное дело и несовсем удобно. Но поскольку неудобно только спать на потолку, то со всем остальным можно смириться.
...
Рейтинг: 0 / 0
Исключения из правил
    #36909430
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Пусть мы внедрили систему на острове Мумба-Юмба. Но заинтересовался соседний остров Чунга-Чанга

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

Жаль, что вы ничего не слышали об административном и административно-территориальном делении, жаль, что вы ничего не слышали о маршрутах, контурах и шаблонах. Не удивляет, что в оценке количества необходимых таблиц вы ошиблись на пару-тройку порядков.

По моему весьма "толсто". И без намека за собственную позицию.
...
Рейтинг: 0 / 0
Исключения из правил
    #36909673
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> И без намека за собственную позицию.

Все предельно прозрачно: нефиг заниматься тем, о чем нет ни малейшего понятия. Мне было бы стыдно получать зарплату за собственное невежество.
...
Рейтинг: 0 / 0
Исключения из правил
    #36909886
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> И без намека за собственную позицию.Все предельно прозрачно: нефиг заниматься тем, о чем нет ни малейшего понятия. Мне было бы стыдно получать зарплату за собственное невежество.

и сразу пример невежества в студию.
...
Рейтинг: 0 / 0
Исключения из правил
    #36910674
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> и сразу пример невежества в студию.

Дружище, если вы не видите очевидного, обсуждать нам не просто нечего, а категорически нечего.
...
Рейтинг: 0 / 0
Исключения из правил
    #36911334
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> А что, для государственного документооборота еще какие-то таблицы нужны? Для любого документооборота.> Мне об этом ничего не сказали...Значит, задачи вам формулируют бараны.

Что вы ко всему придираетесь? Я уже все почти сделал, только никак не пойму, как внешние ключи направить. А за зарплату зря упрекаете, хоть я и понимаю, что вам завидно. Просто нам выделили большой грант на автоматизацию документооборота министерства, а в понедельник приезжает начальник, и нужно чтоб все готово было. А тут эти внешние ключи.

Подскажите, что тут поправить? Да, и делать буду в Access97, а то там компьютеры очень старые, да и книжка у меня только про него нашлась. Или все-таки выбрать Paradox for Windows?
...
Рейтинг: 0 / 0
Исключения из правил
    #36911368
Фотография Taper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher, мой вам совет - берите Аксесс в зубы и в профильный подфорум здесь же. Народ там отзывчивый, может и сам подключусь. Приветствуются конкретные вопросы по конкретным данным.
Другой вариант - наймите фрилансера - типа срочная задача разработать структуру БД. Если что, можете и ко мне обратиться.
...
Рейтинг: 0 / 0
Исключения из правил
    #36912227
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

Вы доставляете все больше радости читателям Ваших сообщений.
1. Оригинально расположены внешние ключи. Задумайтесь о том, как данные попадут в эти таблицы, если они циклически завязаны друг на друге (конечно, если связи обязательные)
2. А сочетание русских и латинских букв в названиях столбцов - новейшее слово в отечественной проктостоматологии :)
3. авторДа, и делать буду в Access97, а то там компьютеры очень старые, да и книжка у меня только про него нашлась.Оба аргумента неотразимы. Второй так просто железобетонный.
4. авторПросто нам выделили большой грант на автоматизацию документооборота министерства, а в понедельник приезжает начальник, и нужно чтоб все готово было.Аффтар, жги ищо :)
5. "Отзывчивый народ" из Access с нетерпением ждет Вас. Ога, вперед и с песнею. И с кошельком наперевес. ;)
...
Рейтинг: 0 / 0
Исключения из правил
    #36913742
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_L,

есть мнение , что данной схемой и перечисленными бд - автор глумился)
...
Рейтинг: 0 / 0
Исключения из правил
    #36914433
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senya_LЗадумайтесь о том, как данные попадут в эти таблицы, если они циклически завязаны друг на друге (конечно, если связи обязательные)

По остальной части схемы, стало быть, возражений не поступило :-) Ну уж если говорить о циклических ключах, то на это есть DEFERRABLE CONSTRAINTS.

Озверин
есть мнение , что данной схемой и перечисленными бд - автор глумился)

Я не хотел бы выражаться столь категорично, но боюсь, что Вы описали ситуацию исчерпывающим образом :-)
...
Рейтинг: 0 / 0
Исключения из правил
    #36914506
Senya_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherОзверин
есть мнение , что данной схемой и перечисленными бд - автор глумился)

Я не хотел бы выражаться столь категорично, но боюсь, что Вы описали ситуацию исчерпывающим образом :-)А, искрометный юмор! Понятно... только самому автору.
...
Рейтинг: 0 / 0
Исключения из правил
    #37074188
laney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернусь к теме, которую изложил автор поста.

Очевидно, что у нас есть пользователи (типы пользователей - Вождь, Шаман и т.д.) и объекты (типы объектов - Закон, Постановление, Указ....). Если давать права пользователям на объекты, то действительно получается декартово произведение. Для того, чтобы его не было нужно ввести промежуточную развязывающую сущность (Роли или Группы).

Между ТипПользователя -- Роль отношение М:М
Между Роль -- Тип документов отношение тоже М:М

После этого все просто - Вождь входит в группу Издатель Законов - этой группе даны права на редактирование всех типов документов (в т.ч. и законов).
Остальные пользователи входят в группу (Обычные пользователи) - этой группе даны права на редактирование всех типов документов кроме законов

Решение универсальное - и декартового произведения удалось избежать.
...
Рейтинг: 0 / 0
Исключения из правил
    #37076584
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherИнтересен опыт: сталкивались ли вы с подобными случаями, и как обходили?
Я для подобных случаев сформулировал "принцип минимальности строк". То есть сделал бы примерно так:

Код: plaintext
1.
2.
3.
4.
create table "Допустимые типы документов от издателей" (
  "ид типа документа" integer not null references "Тип документа" ("ид типа документа"),
  "ид типа издателя" integer refrences "Тип издателя" ("ид типа издателя"), -- null - любой издатель
  "разрешено" boolean not null, -- true - разрешено для этого издателя, false - запрещено для этого издателя
  constraint "uk_Допустимые типы документов от издателей" unique ("ид типа документа", "ид типа издателя"));

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

Ну а значение режима легко определяется запросом вида ... where id = :id or id is null order by id nulls last.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Исключения из правил
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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