2010-02-20 99 views
1

我有两个类ParentChildJava中的父类和子类应该有2个数据表?

class Child extends Parent { 
    private String extraField1; 
    private String extraField2; 
    ... 
} 

Child类有2名额外的字段extraField1extraField2

Q1。我应该做两个差异。数据库中的表格:一个用于Child,另一个用于Parent

Q1。我应该在Parent表中添加两列(每列添加一个额外字段)并将Child存储在Parent表中。

=============================== EDITED ============== =========================

是的,ChildParent是同一层次中的类。

+0

你能解释一下你想要实现什么?那些'extraField1/2'是什么?基本上在很多情况下,'Parent'和'Child'是同一件事 - 它们是某些层次结构的某些元素。 – Crozin 2010-02-20 10:34:29

+0

我不明白你的基本概念。为什么孩子*延长父母?这不是处理1:n关系的正常方式,除非Java与我所知的OOP语言不同。 – 2010-02-20 10:34:33

+0

无论如何,正如我在其他问题中所说的,我认为你肯定需要两张桌子。 – 2010-02-20 10:43:41

回答

10

在Java中,父类和子类是否应该有2个数据表?

这个问题没有普遍的答案。实际上有几种将继承层次映射到关系数据库的技术,它们都有优点和缺点。选择一个或另一个取决于你的上下文。

斯科特·安布勒详细介绍了他的著名论文Mapping Objects to Relational Databases: O/R Mapping In Detail的部分2. Mapping Inheritance Structures说我引用下面的各种方法:

(...)在本节 你会看到有 3用于将 继承映射到关系数据库的主要解决方案,以及超越继承 映射的第四个补充 技术。这些方法包括:

对于一个全面的比较(与优点,缺点以及何时使用的建议),有看一下2.6 Comparing The Strategies这个部分。

我不能比他做得更好,所以在解释他时没有意义,只需参考原文。

+0

@Pascal与往常一样,你也帮助我这次...感谢那... – 2010-02-22 17:59:09

+0

@Yatendra不客气。很高兴你发现这个答案很有用(上述文章实际上是必读的)。 – 2010-02-22 18:26:28

0

Patterns of Enterprice Application Architecture涵盖此以及在其章节Single-table inheritance,Class-table inheritanceConcrete-table inheritance

覆盖范围与Pascal所说的相似。没有一个真正的方法,但这本书确实给你一个成本和收益的细分,例如

混凝土表继承的优势是:

  • 每个表是自包含的,没有不相关的领域。结果 当其他 未使用 对象的应用程序使用它时很有意义。
  • 当从具体的 映射器读取数据时,没有连接要做。
  • 只有在访问该类时才会访问每个表,这可以使 传播访问负载。

混凝土表继承的缺点是:

  • 主键可以是难以处理。
  • 您不能强制数据库关系抽象类。
  • 如果域类中的字段被向上或向下推送到层次结构中,则必须更改 表的定义。你不必像 那样做很多的改变,如类表 继承(285),但你不能 忽略这一点,因为你可以用单一的 表继承(278)。
  • 如果超类字段发生更改,则需要更改每个具有此字段的表 ,因为超类 字段在 表之间重复。
  • 查找超类迫使您检查所有表,这导致 到多个数据库访问(或 奇怪的联接)。
相关问题