时间:2011-06-16 16:08:49

标签: database-design language-agnostic

我有一个应用程序,每天收到大量需要两次员工评审的项目。收到一个项目并输入数据库后,它就会进入审核过程。

审核过程就是这样的。

  • 接收项目并标记应用标签“first checker”
    • 第一个检查器能够将项目置于两个待处理状态之一或清除它。清除项目会自动将项目标签替换为“second checker?”
    • 如果某个项目进入待处理状态,它将保留在那里,直到审阅者做出最终决定。
  • 第二个检查员检查项目并选择最终决定。
  • 该项目已标记为已完成。

我目前在我的数据库中有一个名为Statuses的表,其中包含以下列。

Id
Name

此表格中的数据(IdName格式)。

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

我遇到的问题是代码无法知道或者知道一旦第一个检查器完成检查并且没有将项目置于挂起状态,该项目应该获得的下一个标签是{{1} }。我能想出解决这个问题的唯一方法是在这个表中添加一系列列。例如,我目前有1, Second CheckerIsFirstCheckerIsSecondChecker列。

因此,对于所有这些额外的列,我能够检查项目审核的保存时间,如果做出最终决定,则在数据库中查询要更改IsPendingStatus IsSecondChecker的状态检索标签(或状态,如果你愿意)trueId表的FK)。

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

我想补充一点,这个解决方案适用于非常少的代码逻辑。我开始考虑更多,并认为可能有另一种方法来解决这个问题。

1 个答案:

答案 0 :(得分:2)

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

http://en.wikipedia.org/wiki/Finite-state_machine

对于当前的要求可能有点过分 - 但它是一种优雅,可扩展的方式来模拟“接下来会发生什么”的问题。