如果 Sections 和 Departments 的结构几乎相同,则可以使用自联接
Create Table Departments
(
DeptId ... not null Primary Key
, ParentDeptId null References Departments ( DeptId )
, Name ... not null Unique
)
在此结构中,ParentDeptId 为空的部门是部门,ParentDeptId 为非空的部门是节。那么你的角色表就很简单了:
Create Table Roles
(
WorkerId ... not null References Workers ( WorkerId )
, DeptId ... not null References Departments ( DeptId )
, Description ... not null
)
另一种选择是创建一个捕获公司层次结构的表。
Create Table Departments
(
DeptId ... not null Primary Key
, Name ... not null Unique
)
Create Table Sections
(
SectionId ... not null Primary Key
, Name ... not null Unique
)
在下表中,SectionId 为 null 的地方代表一个部门,SectionId 不为 null 的地方显然代表一个 Section。
Create Table CompanyAreas
(
Id ... not null Primary Key
, DeptId ... not null References Departments ( DeptId )
, SectionId ... null References Sections ( SectionId )
, Unique ( DeptId, SectionId )
)
Create Table WorkerRoles
(
CompanyAreaId ... not null References CompanyAreas ( Id )
, WorkerId ... not null References Workers ( WorkerId )
, Description ... not null
)