【问题标题】:Database Design - Different Statuses for Different Types数据库设计 - 不同类型的不同状态
【发布时间】:2016-02-02 05:18:43
【问题描述】:
我有一个处理任务的系统,可以有不同类型的任务。例如,也许有一个“修复计算机任务”和一个“修复电话任务”。我想更新每个的当前状态,但由于它们是不同类型的任务,它们可能共享也可能不共享相似的状态。我想知道处理这种事情的最佳方法是什么。
所以对于计算机任务,一些状态可能是:
- 正在诊断
- 疑难解答
- 修复
- 完成
然后对于电话任务,我们有:
- 正在诊断
- 订购零件
- 修复
- 测试调用
- 完成
如您所见,有些状态是重叠的,而有些是该类型独有的。您会为每个任务类型创建一个新的状态表,还是有更好的方法来处理这样的事情?
【问题讨论】:
标签:
mysql
database
database-design
relational-database
【解决方案1】:
有不止一个有效答案。以下是两种相互竞争的方法,各有优缺点。
方法 1:每种任务类型的不同状态表(包含 status_id 和 status_name 列)。如果您还跟踪每个任务类型的不同表中的任务(例如computer_tasks_tbl 和phone_tasks_tbl),这很合适,因为您可以在每个任务表及其相应的状态表之间定义外键约束。这个优点是您可以确保数据库级别的数据完整性,并且模式是设计的有用文档。缺点是,如果任务类型越来越多,最终会得到很多表,并且需要更频繁地更新架构。
方法 2:所有可能状态的单个状态表。这样做的好处是简化了模式,尤其是当您有许多不同类型的任务时,这意味着您将不得不随着时间的推移进行更少的模式更改。缺点是你没有享受到外键约束的数据完整性保证,你完全依赖应用程序来插入好的数据。
与所有设计决策一样,这涉及到权衡。在这种情况下,需要在数据完整性保证与架构的简单性和稳定性之间进行权衡。