Я настраиваю базу данных и нахожусь в месте, где я путаюсь с некоторыми таблицами «многие ко многим».Я ищу несколько советов о том, как лучше спроектировать это для производительности и масштабируемости.
Ниже я приведу пример своей установки и того, что я пытаюсь сделать.
У меня естьтаблица главных объектов ...
Учетная запись
AccountID| AccountName
-----------------------
1 | First Account
... и затем дочерние объекты, которым будут предоставлены разрешения.
Страница
PageID | PageName
------------------
1 | First Page
Управление
ControlID | ControlName
-----------------------
1 | First Control
MenuItem
MenuItemID | MenuItemName
-------------------------
1 | Menu Item 1
У меня естьТаблица разрешений для чтения / записи и т.д ...
Разрешение
PermissionID | PermissionName
------------------------------
1 | CanRead
2 | CanWrite
3 | CanDelete
Итак, я пытаюсь связать таблицу разрешений между многими ко многим междуосновные объекты и дочерние объекты.Ниже я приведу список того, что я придумал, и почему я не думаю, что это правильно.
Одна таблица, чтобы управлять ими всеми
PermissionAccount
AccountID | PermissionID | ControlID | MenuItemID | PageID
----------------------------------------------------------
1 | 2 | NULL | NULL | NULL
2 | NULL | 2 | NULL | NULL
* это решение просто безобразно.Для одной учетной записи может быть назначено множество MenuItemID
Одна таблица для каждого объекта
PermissionAccountControl
AccountID | ControlID | PermissionID
------------------------------------
1 | 1 | 1
1 | 2 | 1
PermissionAccountMenuItem
AccountID | MenuItemID | PermissionID
-------------------------------------
1 | 1 | 2
1 | 2 | 1
PermissionPage
AccountID | PageID | PermissionID
---------------------------------
1 | 1 | 3
1 | 2 | 1
Я склоняюсь больше ко второму варианту.Любые мысли или предложения приветствуются.