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

时间:2016-02-02 05:18:43

标签: mysql database database-design relational-database

我有一个处理任务的系统,可以有不同类型的任务。例如,也许有一个“修复计算机任务”和“修复手机任务”。我想更新每个的当前状态,但由于它们是不同类型的任务,它们可能会或可能不会共享相似的状态。我想知道接近这样的事情的最佳方法是什么。

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

  1. 诊断
  2. 故障排除
  3. 定影
  4. 完整
  5. 然后对于电话任务,我们有:

    1. 诊断
    2. 订购零件
    3. 定影
    4. 测试电话
    5. 完整
    6. 如您所见,某些状态重叠,而某些状态是该类型的唯一状态。你会为每个任务类型创建一个新的状态表,还是有更好的方法来处理这样的事情?

1 个答案:

答案 0 :(得分:2)

有多个有效答案。以下是两种有利可图的竞争方法。

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

方法2 :所有可能状态的单一状态表。优点是这简化了模式,特别是如果您有许多不同类型的任务,这意味着您将不得不随着时间的推移减少模式更改。缺点是您不享受外键约束的数据完整性保证,并且您完全依赖应用程序来插入良好的数据。

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