我需要数据库设计的帮助。
到目前为止,我有三张桌子:
TblDepartments -------------- DeptID (PK) DeptName TblSections ----------- SectionID (PK) DeptID (FK) SectionName TblWorkers ---------- WorkerID (PK) WorkerName
部门和部门之间存在1:N关系(部门可能有多个部分,部分属于一个部门)。
现在,工人可能在部门级别或部门级别担任职务(即在部门的所有部门中具有相同的角色)。
我不确定如何定义Roles表。我带来了这个定义:
TblRoles -------- WorkerID (PK)(FK) DeptID (PK)(FK) SectionID (PK)(FK) RoleDesc
但我不喜欢这个解决方案而且我觉得它错了。 (DeptID或SectionID必须为null,而且SectionID依赖于DeptID)。
有更好的方法来定义Roles表吗?
答案 0 :(得分:0)
首先,您需要一个只有角色的表,因为您无法获得重复数据。
roles
-----
roleId
name
工人可以有多个角色吗?
workerRole
----------
workerId
roleId
如果一个工作人员只有一个角色,只需将其添加到您的工作人员表
worker
------
workerId
name
roleId
如果角色可以属于某个部门和部门,则每个角色都有一个表格:
departmentRole sectionRole
-------------- -----------
departmentId sectionId
roleId roleId
答案 1 :(得分:0)
如果Sections和Departments的结构几乎相同,您可以使用自联接
Create Table Departments
(
DeptId ... not null Primary Key
, ParentDeptId null References Departments ( DeptId )
, Name ... not null Unique
)
在此结构中,具有null ParentDeptId的Department是Department,而具有非null ParentDeptId的Department是section。然后你的角色表是直截了当的:
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
)