数据库设计——不同类型的不同状态

Database Design - Different Statuses for Different Types

我有一个处理任务的系统,可以有不同类型的任务。因此,例如,可能有一个 "fix computer task" 和一个 "fix phone task"。我想更新每个任务的当前状态,但由于它们是不同类型的任务,它们可能共享也可能不共享类似状态。我想知道处理此类问题的最佳方法是什么。

因此对于计算机任务,一些状态可能是:

  1. 正在诊断
  2. 疑难解答
  3. 正在修复
  4. 完成

然后对于 phone 个任务,我们有:

  1. 正在诊断
  2. 订购零件
  3. 正在修复
  4. 测试通话
  5. 完成

如您所见,有些状态是重叠的,而有些是该类型独有的。你会为每个任务类型创建一个新的 table 状态,还是有更好的方法来处理这样的事情?

有多个有效答案。这里有两种相互竞争的方法,各有利弊。

方法 1:每种任务类型的不同状态 table(包含列 status_idstatus_name)。这是 suitable 如果您还跟踪每个任务类型的不同 table 中的任务(例如 computer_tasks_tblphone_tasks_tbl),因为这样您就可以定义外键约束在每个任务 table 及其相应状态 table 之间。这个优点是您可以确保数据库级别的数据完整性,并且模式是设计的有用文档。缺点是如果任务类型越来越多,您最终会得到很多 table,并且需要更频繁地更新架构。

方法 2:所有可能状态的单一状态 table。优点是这简化了架构,尤其是当您有许多不同类型的任务时,这意味着随着时间的推移您将不得不进行更少的架构更改。缺点是你没有享受外键约束的数据完整性保证,你完全依赖应用程序来插入好的数据。

与所有设计决策一样,这涉及权衡。在这种情况下,它是数据完整性保证与架构的简单性和稳定性之间的权衡。