Database design 数据库设计问题

Database design 数据库设计问题,database-design,data-modeling,Database Design,Data Modeling,我正在设计一个组织结构图,为了清晰起见,模型已经准备好了,并且简化了一点 OrgUnit (OrgUnitId, Name, ReportsToOrgUnitId, ...) OrgUnitJobs (OrgUnitJobId, OrgUnitId, JobName, ReportsToOrgUnitJobId, ... ,IsJobGroup) Employee (EmployeeId, ........) OrgUnitJobEmployee (OrgUnitJobId, EmployeeI

我正在设计一个组织结构图,为了清晰起见,模型已经准备好了,并且简化了一点

OrgUnit (OrgUnitId, Name, ReportsToOrgUnitId, ...)
OrgUnitJobs (OrgUnitJobId, OrgUnitId, JobName, ReportsToOrgUnitJobId, ... ,IsJobGroup)
Employee (EmployeeId, ........)
OrgUnitJobEmployee (OrgUnitJobId, EmployeeId, AssignedDate, .....,)
所以我想知道每个组织单位的经理员工(应该有一个),员工可以有多个工作,但其中一个必须是主要工作,所以我知道他的经理和其他工作是什么。 这将支持scnese背后的一个小工作流,因此它不是一个非常简单的组织结构图模型

那么,您会怎么做,您会向OrgUnitJobs模型添加类似(IsManager属性)的属性,还是将ManagerGunitJobId添加到OrgUnitModel。为什么


同样,对于员工,您会将IsPrimaryJob属性添加到OrgUnitJobEmployee模型中,还是将PrimaryJobId添加到员工模型中。

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

我会将PrimaryJobId添加到员工。这保证了一名员工只有一份主要工作


因此,我想在这两种情况下,我更喜欢XxxId类型的属性,而不是布尔IsXxx属性。IsXxx属性为多个管理者或多个主要工作打开了大门。

我不完全理解管理者的概念。经理是员工还是组织单位?根据您的回答,我会在OrgUnit和/或OrgUnitJobs上设置ManagerEmployeeId或ManagerGunitJobid属性

我会将PrimaryJobId添加到员工。这保证了一名员工只有一份主要工作


因此,我想在这两种情况下,我更喜欢XxxId类型的属性,而不是布尔IsXxx属性。ISXXX属性为多个管理者或多个主要工作打开了大门。

您可以考虑添加2个表(虽然我可能遗漏了一些东西):

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

-或

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


对于经理是在OrgUnitJob级别指定还是在OrgUnitJobEmployeeID级别指定,我有点困惑??上面假设它在OrgNITJOB中,但是如果它在雇员层,将OrguniMeStor(OrgUnJOBID)更改为OrguntMistor(OrgUnJOBJeWorkID)

,您可以考虑添加2个表(虽然我可能遗漏了一些东西):

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

-或

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


对于经理是在OrgUnitJob级别指定还是在OrgUnitJobEmployeeID级别指定,我有点困惑??以上假设它位于OrgUnitJob,但如果它位于员工级别,请将OrgUnitManager(OrgUnitJobID)更改为OrgUnitManager(OrgUnitJobEmployeeID)

现在想不出要添加的内容,但我喜欢此架构的外观-我迄今为止看到的最真实的组织结构图架构。现在想不出要添加的内容,但我喜欢这个模式的外观——这是迄今为止我所见过的最真实的组织结构图模式。现实世界中会出现多个经理,因此该模式允许它是件好事。ManagerRorGunitJob是为该组织单元定义的工作,就像该组织单元中的任何其他工作一样,但它是唯一的,它应该显示该组织单元的经理职位。最后,经理是一名雇员(填补该职位)。我不想将管理职位与其他职位区别对待,这样我就可以记录员工在组织中的职务变动历史。现实世界中会出现多个经理,所以架构允许这样做是好事。ManagerRorgUnit是为该组织单位定义的职务,就像该组织单位中的任何其他职务一样,但它是唯一的,应该显示该部门的经理职位。最后,经理是一名雇员(填补该职位)。我不想将管理职位与其他职位区别对待,这样我就可以记录员工在组织中的工作变动历史。
OrgUnitManagers(OrgUnitJobID)  
OrgUnitJobEmployeeMain(OrgUnitJobEmployeeID) 
OrgUnitManager(OrgUnitJobID, OrgUnitId)  
OrgUnitJobEmployeeMain(EmployeeId, OrgUnitJobID)