数据库设计问题

时间:2009-06-21 21:05:06

标签: database-design data-modeling

我正在设计一个组织结构图,模型几乎已经准备就绪,并且为了清晰起见而进行了简化。

OrgUnit (OrgUnitId, Name, ReportsToOrgUnitId, ...)
OrgUnitJobs (OrgUnitJobId, OrgUnitId, JobName, ReportsToOrgUnitJobId, ... ,IsJobGroup)
Employee (EmployeeId, ........)
OrgUnitJobEmployee (OrgUnitJobId, EmployeeId, AssignedDate, .....,)

所以我想知道每个OrgUnit的ManagerEmployee(应该有一个),而Employees可以有多个工作,但其中一个必须是主要工作,所以我知道他的经理和其他东西。 这将支持scnese背后的一些工作流程,因此这就是为什么它不是一个非常简单的组织结构图模型。

那么你会做什么,你会添加像(IsManager属性到OrgUnitJobs模型)的属性或将ManagerOrgUnitJobId添加到OrgUnitModel。为什么?

同样,对于员工,您会将IsPrimaryJob属性添加到OrgUnitJobEmployee模型,或将PrimaryJobId添加到Employee Model。

2 个答案:

答案 0 :(得分:1)

您可以考虑再添加2个表格(虽然我可能会遗漏一些内容):

OrgUnitManagers(OrgUnitJobID)  
OrgUnitJobEmployeeMain(OrgUnitJobEmployeeID) 

可以使用参照完整性设置来确保删除OrgUnitJob或OrgUnitJobEmployee记录,这些表会自动更新(如果在您的数据库中可用)

-OR -

OrgUnitManager(OrgUnitJobID, OrgUnitId)  
OrgUnitJobEmployeeMain(EmployeeId, OrgUnitJobID)  

可以使用参照完整性和现在索引来确保唯一性,尽管现在模式中存在重复

我是否在OrgUnitJob级别或OrgUnitJobEmployeeID级别指定了管理员?上面假设它在OrgUnitJob,但如果它在员工级别,将OrgUnitManagers(OrgUnitJobID)更改为OrgUnitManagers(OrgUnitJobEmployeeID)

答案 1 :(得分:0)

我并不完全理解经理人的概念。经理是员工还是组织单位?根据您的回答,我在OrgUnit和/或OrgUnitJobs上有一个ManagerEmployeeId或一个ManagerOrgUnitJobId属性。

我会将PrimaryJobId添加到Employee中。这可以保证员工只有一个主要工作。

所以我想在两种情况下我都赞成在布尔IsXxx属性上使用XxxId类型的属性。 IsXxx属性为多个经理或多个主要工作打开了大门。