【问题标题】:Employee-number as PK, some employees have to wait for their number员工号作为PK,部分员工需要等待他们的号
【发布时间】:2019-03-14 09:10:56
【问题描述】:

我正在处理以下问题。

公司有很多员工,一旦他们的合同进入系统,他们都会收到一个唯一的员工编号。有时合同会延迟,员工在获得员工编号之前就开始工作。

公司部门需要一个包含更多员工详细信息的数据库。他们一开始就需要这样做。所以我有一个完美的主键,因为它是公司范围内的唯一整数,但有时它还不存在。这里的最佳做法是什么?

用一个临时编号将它们存储在同一个地方是不可能的,PK应该是不可变的。

就我个人而言,我正在考虑将员工数据存储在具有自动递增 PK 的单独表中,并在该表不为空时将其与其余表一起查询。一旦员工收到它的号码,它将从此表中删除并添加到主表中。对我来说,这似乎比为每个员工添加另一个唯一标识符更好的选择,因为每隔一段时间就会出现一个异常值。

想法或建议?

【问题讨论】:

  • 我认为为每个人设置一个自动增量编号并没有什么坏处,而且它比单独的表格更容易。
  • 使用代理 PK....
  • 我认为您需要修复您的业务流程,以解决部门一开始就需要员工 ID 的问题。入职流程应该在开始日期之前开始,并且分配员工 ID 应该是该流程的一部分。当需要修复这个过程时,我不会跳过数据库中的障碍。
  • PK 不应该是员工编号。在我看来,内部 id 应该没有超出数据库范围的意义。
  • @GordonLinoff 这也是我的首选解决方案。可悲的是,这是我必须处理的情况,我无法改变它。

标签: mysql sql database database-design primary-key


【解决方案1】:

你把它弄得太复杂了。

公司有很多员工,一旦他们的合同进入系统,他们都会收到一个唯一的员工编号。

一旦您获得他们的任何信息,请立即给他们一个号码。如果他们稍后需要不同的编号(对于某种徽章编号等),请添加一个包含该编号的字段,但初始内部 ID 永远不应更改或更新。

【讨论】:

  • > 但是初始内部 ID 永远不应更改或更新 是的,我明白,我自己也说过。在阅读了您和其他人的评论后,我意识到使用代理键是可行的方法,还因为与员工编号相比,它的价值是匿名的,这是我以前没有考虑过的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 2013-10-06
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
相关资源
最近更新 更多