我的数据库中有一个员工表,我想将员工链接到他们的经理:

员工 桌子

  • 员工ID
  • 经理 ID

如果 manager_id 只是同一个表中的另一行,经理将其作为其员工,那么强制执行的最佳方法是什么,如果我删除员工,它会验证该员工不是另一个员工的经理?

对此有更好的最佳实践吗?

有帮助吗?

解决方案

您可以使用 自加入 就像您使用连接到其他表一样 PK & 氟肯.

我认为你应该考虑一些事情来设计这个。例子:

  • 不同的管理者: 汤姆是个小学生。今天是 Pgmr,而 Jerry 今天是他的经理。明天汤姆可能会向塞巴斯蒂安汇报。
  • 促销活动: 汤姆是个小学生。今天是 Pgmr,而 Jerry 今天是他的经理。明天汤姆可能会成为一名经理,并让其他人向他汇报。
  • 促销2: Tom 可能会从初级项目经理、高级项目经理、团队负责人、项目负责人到经理。你想保存这个吗?
  • 报告: 您可能想在某个时间点显示层次结构(有些用户迟早会要求提供报告)

您可能需要考虑将数据拆分为单独的实体 - 按如下方式标准化数据(甚至根据您的需要进行更多标准化)

  • 员工表: 员工基本信息
  • 位置查找表: 组织中所有职位的列表
  • 员工职位表: 跟踪员工发生职位变动的开始日期和结束日期。
  • 员工职位层次表: 哪些员工职位向另一个员工职位报告(使用双连接而不是自连接);带有开始和结束时间戳

其他提示

您可以使用外键约束(无需级联删除)。如果您尝试删除手下还有其他员工的经理,数据库将自动检测到该情况,并且操作将失败。

如果您的应用程序(或组织)不断发展,请使用多对多关联来覆盖您的基础。

Employee.Employee_id  <- EmployeeManager.Employee_id 
                         EmployeeManager.Manager_id -> Employee.Employee_id
                         Manager_role_type
                         etc.

始终使用外键约束。

使用外键,这是一种“通常”的方法:

employee_model_01

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top