Рассмотрим следующие данные в базе данных SQL. Посмотрев на первый ряд в Objects_In_Roles
, вы увидите, что:
объект типа user
с идентификатором 1
находится в role
с ролью 4
(имя под номером: Level * 4).
* примечание: уровень - это просто имя, не обязательно иерархический уровень
Посмотрев на другие данные в Objects_In_Roles
, вы увидите, что роль Level 4
связана с ролью Level 3
. Роль Level 3
связана с ролью Level 2
, и, наконец, роль Level 2
связана с ролью User
.
Можно ли создать запрос (используя рекурсивный CTE ), который определяет, что Fred
связан с ролью User
?
Пользователи
| userid | username |
+========+==========+
| 1 | Fred |
+--------+----------+
Роли
| roleid | rolename |
+========+==========+
| 1 | User |
| 2 | Level 2 |
| 3 | Level 3 |
| 4 | Level 4 |
+--------+----------+
Objects_In_Roles
| objectid | objecttype | roleid |
+==========+============+========+
| 1 | user | 4 |
| 4 | role | 3 |
| 3 | role | 2 |
| 2 | role | 1 |
+----------+------------+--------+