我正在设计一个关系数据库,其中用户对其各个部分具有一定的访问级别。让我们将这些部分称为Company、Site和Department。ACompany由一个或多个组成Site,每个Site由一个或多个组成Department。这些实体之间存在多对多的关系User,并且每个关系都有一个访问级别。
例如,可能User1具有对 的访问级别3,可能对's具有访问级别,并且可能对's具有访问级别。如果 a可以访问某个实体(例如公司),则假定他们也可以访问该实体的成员。CompanyAUser22CompanyASite1User31Site1DepartmentXUser
我想创建一个视图,列出每个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合并到此表中,以便在表中显示具有公司范围权限的用户?
如果我的数据库设置不清楚,请在评论中要求澄清。