ユーザーがさまざまな部分への特定のアクセスレベルを持つリレーショナルデータベースを設計しています。これらの部分Companyを 、Site、 と呼びましょうDepartment。ACompanyは 1 つ以上の で構成されSite、それぞれSiteは 1 つ以上の で構成されますDepartment。これらの各エンティティ間には多対多のUser関係があり、各関係にはアクセス レベルがあります。
たとえば、へUser1のアクセス レベル、 へのアクセス レベル、へのアクセス3レベルなどがCompanyAあります。が会社などの特定のエンティティにアクセスできる場合、そのエンティティのメンバーにもアクセスできると見なされます。User22CompanyASite1User31Site1DepartmentXUser
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全社的な権限を持つユーザーがテーブルに表示されるように、このテーブルにを組み込むにはどうすればよいですか?
データベースの設定が不明な場合は、コメントで説明を求めてください。