【问题标题】:Database Design - Different Statuses for Different Types数据库设计 - 不同类型的不同状态
【发布时间】:2016-02-02 05:18:43
【问题描述】:

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

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

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

然后对于电话任务,我们有:

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

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

【问题讨论】:

    标签: mysql database database-design relational-database


    【解决方案1】:

    有不止一个有效答案。以下是两种相互竞争的方法,各有优缺点。

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

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

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

    【讨论】:

    • 感谢您的宝贵时间和回答!
    猜你喜欢
    • 2018-01-13
    • 2015-05-18
    • 1970-01-01
    • 2013-12-03
    • 2012-05-04
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多