知识卡片

ORM实现继承的三种策略及其取舍

普通读书笔记卡 · 1977.z

内容

关系表自身不具备继承能力,泛化关系映射有三种策略:①Single-Table(ORM默认)——整个继承体系放一张表,把父子类所有属性求并集,另加一个标识列区分子类(@DiscriminatorColumn),差异大时会产生大量不必要的空列与存储冗余;②Joined-Subclass——父子实体各有一张表,子表不为继承的属性建列,通过共享主键与父表关联(需在父类显式声明@Inheritance(strategy=JOINED)),本质是用一对一连接表达泛化,子类多时多表连接会影响查询效率;③Table-Per-Class——每个实体各一张表,父表仅含父属性、子表含自身加父的全部属性,用表样式冗余避免数据冗余、用单表避免连接,子类差异大时明显优于Joined-Subclass。发散:三策略是”空间冗余 vs 连接开销”的三点取舍——差异小选Single-Table,差异大且要省空间选Joined,差异大且要查得快选Table-Per-Class。

参考来源

- 位置:《解构领域驱动设计》第19章 19.2.2(源文件:_epub-src/OEBPS/032.xhtml) - 结论依据:原文列出Single-Table、Joined-Subclass、Table-Per-Class三策略及各自取舍。 - 原始内容:这种策略在ORM中被称为Single-Table策略……可采用Joined-Subclass策略……则可以采用Table-Per-Class策略。