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