依据部门id查找一个部门内部的最高领导和最低级领导的员工,要怎么实现?

一个部门必须存在员工,并且还有部门领导,而且一个部门可能不止一个领导,还有多级领导。

那么问题来了。要实现通过部门id找到一个部门内部的最高领导和最低级领导的员工。请问部门内的员工和领导存储在数据库中,都用一个数据表存呢,还是用多个数据表存了

如果是用一个数据表存部门员工以及员工领导,最少需要哪些字段?怎么标识员工是不是部门领导,怎么确定领导员工的领导级别?

如果是分开存,需要哪些数据表类型,每个数据表最少需要哪些字段?怎么确定领导员工的领导级别?

举个例子,

例子1:审批问题,某个员工申请了请假单,请假单需要该员工的部门内部领导审批,而且至少是多级领导审批,审批通过了,请假就批准,现在问题来了,怎么找员工所在部门的最低级领导员工呢?

例子2:我不是A部门的员工,我要怎么找A部门里的最低级的领导员工?

阅读 2.7k
2 个回答

我们公司人少,经常出现一个人从属多个部门,担任多个部门领导的情况,所以我们是这样的:

一个表存所有员工,包括领导的基本信息,姓名年龄入职年份等。
一个表存部门信息,部门名称,职能等。
一个表存员工与部门的从属关系,担任职位。

我们行政管理关系和工作组织关系是分开的,所以行政上的上下级管理关系是另一个表。

部门表: departments

  • id:唯一标识
  • name:名称

职工表:staffs

  • id:唯一标识
  • name:姓名

部门职工关联表:department_staffs

  • departmentId:部门 ID
  • staffId:员工 ID
  • leaderId:若有上级员工,则该 ID 为其上级员工的 ID

此结构可以:

  1. 根据 departmentId 查询出该部门下面的所有 staffs
  2. 根据 level 在同一个部门里面,没有 leaderId 的就是最上级领导
  3. 在同一个部门里面,不被 leaderId 引用过的就是最下级员工
  4. 根据 leaderId 同样可以查询到职工的等级树

举个例子:

有以下几个员工:

  • 张三:

    • id:1
    • leaderId:null
  • 李四:

    • id:2
    • leaderId:1
  • 王二:

    • id:3
    • leaderId:2
  • 麻子:

    • id:4
    • leaderId:3

就当是请假这个流程要求至少两级领导签字的话:

  1. 麻子请了一个假,请假条,audits 数字默认为 0lastAuditLeaderIdnull
  2. 系统找到麻子的 leaderId,任务到 id3 的用户那里去了
  3. 王二审核通过, audits 加一,变成了 1lastAuditLeaderId 变成了 3
  4. 系统判断 audits 还没有达到两级,所以查询 lastAuditLeaderId 的上级
  5. 系统将任务指派给了 id2的李四
  6. 李四通过, audits 加一,变成了 2lastAuditLeaderId 变成了 2
  7. 系统判断 audits === 2 了,流程结束

以上表结构,在部门与职工之间,可以实现多次绑定关系,也就是说一个员工可以属于多个部门,如果要一个员工只属于一个部门,那就把 departmentStaffs 表删除了,直接在 staffs 表里面加一个 departmentId 字段即可。

如果一个员工可以有多个领导,那就把 leaderIdstaffs 中移除,新建一张表,把一对多变成多对多而已,但是此时就得注意,A 与 B 可能会互为领导下属,这就需要在系统代码里面去限定了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题