有部门和经理。一个部门有更多的经理,但只有一个经理是该部门的总经理。一个部门必须只有一名总经理。在假期期间,部门的总经理可以是另一个部门的临时总经理。你会如何模仿这个?
请解释您的选择。
答案 0 :(得分:1)
假设一个“普通”经理最多可以管理一个部门,那么您的数据模型应该看起来像这样:
CHIEF_MANAGER_ID可以“指向”:
如果您想确保同一个人无法管理多个部门作为总经理(同时仍然可以作为普通经理管理另一个部门),请在CHIEF_MANAGER_ID上添加UNIQUE约束。
如果您需要同时记住主要经理和主要经理,请使用两个字段而不仅仅是CHIEF_MANAGER_ID(在这种情况下,您还必须强制部门匹配非声明)。
在上面的模型中,DEPARTMENT.CHIEF_MANAGER_ID为NULL。这样做是为了打破外键的循环,因此实际上可以将数据插入到数据库中而不延迟外键。如果您的DBMS支持可延迟约束,则可以将此字段设为NOT NULL并推迟其中一个FK,以便在事务结束时检查(在插入两行之后)。
我刚才意识到还有一个额外的要求:不是每个经理都可以替代。只有酋长可以。你可以做这样的事情来建模:
SUBSTITUTE_DEPARTMENT_ID指向我们“借用”总经理替代的部门。由于我们指的是一个部门,而不是直接经理,我们知道我们必须得到首席经理。
答案 1 :(得分:0)
一个部门表,一个管理员表,一个总经理表。
管理人员与部门之间的关系表,首席经理与部门之间的关系表,以及允许其他部门监督的首席经理关系表(或者,如果它导致较小的数据集,则表应该对于不允许监督的部门的首席经理来说是相互关联的。)
答案 2 :(得分:0)
你可以使用这个模型
系 ( IdDepartment, 其他物业...... )
管理器 ( Idmanager, 其他物业...... )
DepartmentManager ( IdDepartment, IdManager, 方法isTemporary )
在你的物理模型中
DepartmentTable
IdDepartment作为主键
ManagerTable
IdManager作为主键
DepartmentManagerTable (IdDepartment + IdManager)作为主键 IsTemporaryChef作为财产
答案 3 :(得分:0)
一个部门表(包括总经理ID)
一张经理人表(每人)
一个部门/经理关系表(部门ID和经理ID)
示例:
答案 4 :(得分:0)
这里的主要思想是将组织结构图的层次结构与员工(经理是员工)分开。就像总统(职位)和担任职务的人之间的差异一样。
为简单起见,层次结构在这里用leveled-adjacency-list建模;对于SQL层次结构来说效率最高,但对此却足够好。
请注意,部门的总经理有一个职位,不向该部门的任何人报告。整个组织的首席执行官ReportsTo = NULL
,其他所有人都指向老板的位置。
每位员工都可以随着时间的推移履行任何职责。
有关更高效的层次结构模型,请参阅Celko的书或只是谷歌的“SQL层次结构”。