我有一个处理任务的系统,可以有不同类型的任务。例如,也许有一个“修复计算机任务”和“修复手机任务”。我想更新每个的当前状态,但由于它们是不同类型的任务,它们可能会或可能不会共享相似的状态。我想知道接近这样的事情的最佳方法是什么。
因此,对于计算机任务,某些状态可能是:
然后对于电话任务,我们有:
如您所见,某些状态重叠,而某些状态是该类型的唯一状态。你会为每个任务类型创建一个新的状态表,还是有更好的方法来处理这样的事情?
答案 0 :(得分:2)
有多个有效答案。以下是两种有利可图的竞争方法。
方法1 :每种任务类型的不同状态表(列status_id
和status_name
)。如果您还在每个任务类型的不同表中跟踪任务(例如computer_tasks_tbl
和phone_tasks_tbl
),这是合适的,因为这样您就可以在每个任务表及其相应状态之间定义外键约束表。这一优势是您可以确保数据库级别的数据完整性,并且架构是设计的有用文档。缺点是如果任务类型越来越多,最终会有很多表,并且需要更频繁地更新架构。
方法2 :所有可能状态的单一状态表。优点是这简化了模式,特别是如果您有许多不同类型的任务,这意味着您将不得不随着时间的推移减少模式更改。缺点是您不享受外键约束的数据完整性保证,并且您完全依赖应用程序来插入良好的数据。
作为所有设计决策,这涉及到权衡。在这种情况下,它是数据完整性保证与模式的简单性和稳定性之间的权衡。