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

Yos*_*sef 12 database database-design database-management

今天,我研究了大约2种数据库设计继承方法:

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

在我的学生看来,单表继承使数据库比其他方法更小,因为它只使用1个表.但我读到Bill Kawin 认为更有利的方法是Class Table Inheritance.

Single Table Inheritance的优点和缺点是什么?在哪种情况下应该使用它?

Pas*_*ent 17

在我的学生看来,单表继承使数据库比其他方法更小,因为她只使用1个表.

不必要.如果层次结构中的实体没有多少共同属性,则会导致许多空列,并且会浪费大量空间.

但我读到比较Karwin最受欢迎的方法是类表继承.

恕我直言,没有单一的答案,不同的策略(每个层次一个表,每个具体类一个表,每个类一个表)具有所有优点和缺点,并选择一个或另一个取决于上下文.

单表继承的优缺点在哪种情况下使用?

只要您可以最小化可空列的数量(并且说服DBA从长远来看,非规范化架构不会成为问题),当您需要"多态"查询(不需要连接或联合)时,此策略很好. .

实际上,我建议检查映射对象到关系数据库:详细O/R映射由Scott Ambler(关于ORM的参考文章的作者),特别是2.6比较策略 - 在解释他时没有意义.

他对单桌战略的总结:

好处:

  • 简单的方法.
  • 您可以轻松添加新类,只需为其他数据添加新列.
  • 只需更改行的类型即可支持多态性.
  • 数据访问速度很快,因为数据在一个表中.
  • 临时报告非常简单,因为所有数据都可以在一个表中找到.

缺点:

  • 由于所有类都直接耦合到同一个表,因此增加了类层次结构中的耦合.一个类中的更改可以影响表,然后可以影响层次结构中的其他类.
  • 空间可能在数据库中浪费.
  • 当存在类型之间的显着重叠时,指示类型变得复杂.
  • 对于大型层次结构,表可以快速增长.

何时使用:

  • 对于简单和/或浅类层次结构,这是一种很好的策略,其中层次结构中的类型之间几乎没有重叠.

但我热烈建议阅读全文.