Я нахожусь в процессе создания схемы базы данных для следующего сценария:
- Есть пользователи
- У пользователей есть роли (например, «Разработчик» или «Генеральный директор»)
- Роли есть приложения (например, «Topdesk»)
- Приложения имеют разрешения (например, «Обновить базу знаний»)
- Роль может иметь разрешения, если роль уже имеет доступ к приложению
Предполагая отсутствие высокопроизводительной среды (не нужно оптимизировать для скорости), что будет лучшим способом для реализации этой схемы? Среда базы данных может быть MySQL, MSSQL ... это больше о дизайне реляционной базы данных.
Я сам придумал следующее:
Часть, в которой я больше всего не уверен, это, конечно, таблица Applications_Permissions_Roles. Это таблица ссылок поверх другой таблицы ссылок. Я никогда не использовал и не видел это раньше. Другой способ сделать это - заменить его таблицей связи между ролями и разрешениями, а затем использовать код или ограничения для обеспечения требуемых отношений ... но это не кажется мне хорошим решением. Эти вещи должны применяться на уровне базы данных, если это вообще возможно (и кажется возможным), а не на уровне кода.
Во-вторых, необходима ли связь между Permissions.Application и Applications.Id? Я использую его, потому что в Roles_Applications может не быть никаких строк (например, когда вы только что добавили новое приложение), и тогда невозможно определить, какие разрешения принадлежат какому приложению. Это также единственная точка отсчета для поиска, к какому приложению относится разрешение. Я думаю, это правильно, но это также делает круг в дизайне базы данных. Ошибки MSSQL на нем при попытке установить ON_DELETE или ON_UPDATE в каскад.
Любые предложения, или это как это должно быть сделано? Кстати, любые другие предложения, касающиеся соглашения об именах, также приветствуются (возможно, в качестве комментария).
Спасибо
Люк
Изменить: Изменение названия, надеюсь, сделать его более понятным. Предыдущий был более всеобъемлющим, но, вероятно, слишком запутанным.
Roles_Applications
это реально. Учитывая, что все разрешения зависят от приложения, кажется, что они есть Applications_Permissions
(то, что вы пометили Permissions
), которые затем могут быть назначены определенным ролям с помощью записи в Applications_Permissions_Roles
. Roles_Applications
на самом деле, похоже, описывается самое основное разрешение приложения - простой доступ. Или это утверждение о том, что роль имеет некоторый уровень разрешений для приложения, но вы должны искать в другом месте, чтобы определить, какие из них.