Database design 组织查找状态表的优雅方式

Database design 组织查找状态表的优雅方式,database-design,language-agnostic,Database Design,Language Agnostic,我有一个应用程序,每天收到许多需要两次员工审核的项目。一旦收到一个项目并将其输入数据库,它就会进入审查过程 审查过程是这样的 接收项目并标记应用标签“第一个检查人” 第一个检查器可以将项目置于两个挂起状态之一或将其清除。清除项目会自动将项目标签替换为“第二个检查者?” 如果某个项目进入挂起状态,它将一直停留在那里,直到审阅者做出最终决定 第二个检查器检查项目并选择最终决定 该项目被标记为已完成 目前,我的数据库中有一个名为status的表,其中包含以下列 Id Name 以及此表中的数

我有一个应用程序,每天收到许多需要两次员工审核的项目。一旦收到一个项目并将其输入数据库,它就会进入审查过程

审查过程是这样的

  • 接收项目并标记应用标签“第一个检查人”
    • 第一个检查器可以将项目置于两个挂起状态之一或将其清除。清除项目会自动将项目标签替换为“第二个检查者?”
    • 如果某个项目进入挂起状态,它将一直停留在那里,直到审阅者做出最终决定
  • 第二个检查器检查项目并选择最终决定
  • 该项目被标记为已完成
目前,我的数据库中有一个名为
status
的表,其中包含以下列

Id
Name
以及此表中的数据(采用
Id
Name
格式)

我遇到的问题是,代码无法或不知道,一旦第一个检查器完成检查,并且没有将项目置于挂起状态,那么项目应该获得的下一个标签是
1,第二个检查器
。我唯一能解决这个问题的方法是向这个表中添加一系列列。例如,我目前有
IsFirstChecker
IsSecondChecker
IsPendingStatus

因此,通过所有这些额外的列,我能够检查何时保存项目审查,如果做出了最终决定,那么就可以查询数据库中
IsSecondChecker
true
的状态,以使用检索到的
Id
(项目的FK)更改标签(或状态,如果您愿意)

这似乎不是一个非常理想的解决方案,但它确实有效。有没有更好的办法解决这个问题


我想补充一点,这个解决方案只需要很少的代码逻辑。我开始更多地思考这个问题,并认为可能有另一种方法可以解决这个问题。

听起来你需要一个有限状态机

对于当前的需求来说,这可能有点过头了——但这是一种优雅、可扩展的建模“下一步会发生什么”问题的方法

0, First Checker
1, Second Checker
2, Pending State A
3, Pending State B