我正在设计一个关系数据库,其中用户对其各个部分具有一定的访问级别。让我们将这些部分称为Company
、Site
和Department
。ACompany
由一个或多个组成Site
,每个Site
由一个或多个组成Department
。这些实体之间存在多对多的关系User
,并且每个关系都有一个访问级别。
例如,可能User1
具有对 的访问级别3
,可能对's具有访问级别,并且可能对's具有访问级别。如果 a可以访问某个实体(例如公司),则假定他们也可以访问该实体的成员。CompanyA
User2
2
CompanyA
Site1
User3
1
Site1
DepartmentX
User
我想创建一个视图,列出每个Department
相关User
的访问级别Department
。
这是我到目前为止所拥有的:
SELECT
Dept.Id AS 'DeptId', User.Id AS 'UserId',
DeptAccess.RightsLevel AS 'DeptRightsLevel',
SiteAccess.RightsLevel AS 'SiteRightsLevel'
FROM (Dept, User)
LEFT JOIN DeptAccess
ON DeptAccess.DeptId=Dept.Id AND DeptAccess.UserId=User.Id
LEFT JOIN SiteAccess
ON SiteAccess.SiteId=Dept.SiteId AND SiteAccess.UserId=User.Id
WHERE DeptAccess.RightsLevel IS NOT NULL OR SiteAccess.RightsLevel IS NOT NULL
这给出了如下表(假设DepartmentY
也是 的一部分Site1
):
DeptId | UserId | DeptRightsLevel | SiteRightsLevel
-------+--------+-----------------+------------------
X | 2 | NULL | 2
X | 3 | 1 | NULL
Y | 2 | NULL | 2
如何将其CompanyRightsLevel
合并到此表中,以便在表中显示具有公司范围权限的用户?
如果我的数据库设置不清楚,请在评论中要求澄清。