0

在我的程序中,我需要从个人开始制作一个组织结构图,并将他们分组在经理之下,然后将这些经理分组在高级经理之下等......关于数据库我该怎么做?这是一个多对一的关系——我认为这是非法的和不可能的——就像从子表开始——个人——在创建它的父表——经理之前。如果有人可以帮助我指出设计数据库的正确方向,我将不胜感激!

----编辑----这是我的问题的更详细的解释:

假设我的程序的用户首先输入了 35 个他们想在他们将要从事的项目中使用的人。现在,可以创建几个可能的管理职位,并将员工/其他(下级)经理分配给这些职位。用户不必创建任何特定位置,但可以随意选择和分配。唯一的限制是总会有一位高级经理——我们称他为总裁——他应该(但不是必须)只为任何给定的经理(包括总裁)分配 5-10 人。所以在这个例子中,我们从 35 个人和一位总统开始。现在我们开始将这 35 个人分组到团队中,并指定其中一位为经理。假设用户决定有两队 6 人,两队 9 人,一个由 5 人组成的团队 - 每个小组都有一名个人成员被指定为该小组的经理。所以现在我们有 5 个团队,每个团队都有自己的经理,这五位经理现在将被分配给总裁。该程序会放手,但会警告用户最后一个团队中经理的人数少于 5(只有 4)。因此,用户现在(或在任何时候)可以返回并更改组织。所以假设他想解决这个问题并改变团队。于是,他将两支 9 人队伍中的一支打散,并给缺人的队伍分配了一个人。这使得最终计数为 3 个团队,每组 6 人(5 名个人成员和 1 名经理),一组 9 人(8 名独立人员和 1 名经理),以及一组 8 人(7 名独立人员和 1 名经理),并且分配了所有 5 名团队经理给总统。

只有在现实生活中,这才能被进一步分解——具有更多管理级别的巢穴。我怎样才能做到这一点?

下面乔·霍普夫加特纳的回答仍然有效吗?即使稍后会分配角色(在最初创建行之后),我是否可以只创建一个“角色”列?还是随时改变?这个自引用外键可以为空吗?(因为在尚未分配经理的情况下)或者我应该在将个人分配到一个团队后将他们移到一个单独的“团队”表中,一旦他们将经理移到一个“经理”表中'已被分配为经理,然后为引用经理表的团队表添加外键?

另外,我正在使用 MySQL,那么您不能使用自引用 ON UPDATE CASCADE 或 ON UPDATE SET NULL 操作这一事实是否会影响我的特定情况(因为用户无疑会经常更改分配)?

非常感谢你帮我解决这个问题!!!

4

2 回答 2

1

这是一棵树。您可以使用带有parent_id字段的单个表来指示哪条记录是当前记录的父记录。

于 2011-07-17T01:40:58.190 回答
1

如果一个人只能有一个经理,只需引入一个“父母” id 字段或将经理放在一个单独的表中。

如果没有,请为“person_has_manager”之类的关系创建另一个表,将人员分配给经理。

您还可以将经理和人员放在同一个表中并引入“角色”字段,但是如果您想确保只有管理人员可以分配给他们,那么在使用外键约束时这可能会很棘手。

为了解决这个问题,您可以引入一个“person_is_manager”表,将人员与其作为经理的工作联系起来,并且可以将人员链接到由该经理管理。这看起来像这样:

persons
-> person_id (primary)
-> name
-> etc

managers
-> person_id (primary, linked to person_id in persons)

person_has_manager
-> person_id (primary)
-> manager_id (primary, linked to person_id in managers table)
于 2011-07-17T01:44:27.580 回答