0

我正在为一家安全公司设计数据库 (MySQL),并希望跟踪它雇用的所有保安人员。由于该行业的性质,相当多的人被移入“终止”名单(主要是被解雇的人)。该公司希望跟踪他们,因为其中一些人倾向于在一两年后尝试重新申请工作。此外,有时公司的高管认为将某个人列入该列表是不公正的,他们将其恢复(据我了解,这就是为什么 MySQL 存档不起作用)

数据库的“中心”是保护表,它与数据库中的其他表有许多关系,我试图确定设计“终止”列表的最有效方法是什么。我想到了两个选择:

  1. 让警卫表与终止警卫表建立一对一的关系。我在这个解决方案中看到的问题是,每当我想查询数据时,我总是需要在 SELECT 语句中添加一个子句,以排除terminateGuards表中的人。

  2. 制作一个单独的表,其列类似于警卫表,每当警卫移动到该表时,我都会从警卫表中完全删除他们的条目,并将其复制到终止的警卫表中。我在这种方法中看到的问题是我需要遵循与该条目相关联的许多关系(有时我想使用terminateGuards列表中的复制条目重新创建它们以供参考。例如,我需要将保存公司管理的不同站点中警卫工作历史的表与终止的警卫表重新链接,这样我就可以保留该警卫的工作历史,即使他或她被解雇了)。

哪种方法应该更有效?

谢谢。

4

1 回答 1

1

我真的怀疑您是否会在此表中拥有一百万条记录。按状态标记它们,在该状态标志上添加一个索引,你应该没问题。

在表之间移动记录总是很麻烦,所以它通常作为最后的手段。例如,如果您的表中有十亿条记录,您希望对它进行分区或以某种容量对其进行分片,但您在这里谈论的是相比之下微不足道的数据量。您不太可能在此表中拥有超过 100 万条记录,如果您这样做,显然您参与的项目规模如此之大,您可以负担得起承载该规模数据库的硬件。

通常,您会将其构建为有一个guards表,然后是某种关联的记录,这些记录定义了他们何时被雇用、解雇或任何其他影响他们就业的事件。

于 2013-10-25T18:31:27.630 回答