单表继承(数据库继承设计选项)的优缺点以及在哪种情况下使用?

17

今天我学习了两种数据库设计继承方法:

  1. 单表继承
  2. 类表继承

在我看来,单表继承相比其他方法可以使用只用1张表使得数据库更小。但是据Bill Karwin所说,更好的方法是类表继承

单表继承的优缺点是什么?在哪些情况下应该使用它?

2个回答

24
在我看来,单表继承相比其他方法使数据库更小,因为它只使用了一个表。但并不一定。如果你的层次结构中的实体没有太多共同属性,这将导致许多空列,浪费很多空间。 据Bill Karwin称,IMHO,更受欢迎的方法是类表继承。在我看来,并没有单一答案,不同的策略(分层结构每个表、具体类每个表或每个类每个表)都有优缺点,并且选择其中一个取决于上下文。
单表继承的优缺点以及在什么情况下使用?
在需要“多态”查询(无需联接或联合)的情况下,此策略很好,只要您可以尽量减少可空列的数量(并说服DBA,非规范化的模式在长期内不会成为问题)。 实际上,我建议查看ORM的标准论文作者Scott Ambler的Mapping Objects to Relational Databases: O/R Mapping In Detail ,特别是2.6 Comparing The Strategies部分-重述他没有意义。 以下是他对单表策略的总结:
优点:
- 简单易行的方法。 - 容易添加新类,你只需要为附加数据添加新列。 - 通过简单地更改行的类型来支持多态。 - 数据访问速度快,因为数据在一个表中。 - 自由报告非常容易,因为所有数据都在一个表中。

缺点:

  • 类层次结构内的耦合度增加,因为所有类都直接与同一个表相连。一个类的更改可能会影响到该表,从而影响到层次结构中的其他类。
  • 数据库中可能浪费空间。
  • 当类型之间存在重叠时,指示类型变得复杂。
  • 对于大型层次结构,表可能会迅速增长。

何时使用:

  • 这是一个适用于简单和/或浅层类层次结构的好策略,在层次结构内部类型之间很少或根本没有重叠的情况下。

但我强烈建议阅读整篇论文。


非常感谢Paskal!现在我理解得更多了。 - Ben

2

单表继承是一种好的方法,当子类没有许多属性或与其他类的关联时。否则,表格将充满仅对表格的某些元组有意义的属性,并且您需要添加各种约束来检查它们仅包含适当“类型”的元组的值。

此外,所有仅需要处理其中一个子类实例的查询都需要附加子句以根据类型值选择它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接