Java中的Parent和Child类应该有2个数据表吗?

时间:2010-02-20 10:29:01

标签: java mysql sql-server database inheritance

我有两个课程ParentChild

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

Child课程有2个额外字段extraField1extraField2

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

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

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

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

2 个答案:

答案 0 :(得分:10)

  

Java中是否有2个父类和子类的数据表?

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

Scott Ambler详细介绍了我在下面引用的着名论文2. Mapping Inheritance Structures Mapping Objects to Relational Databases: O/R Mapping In Detail部分中的各种方法:

  

(...)在这   部分你会看到有   绘图的三个主要解决方案   继承成关系   数据库,第四个补充   超越继承的技术   映射。这些技巧是:

     

要进行全面比较(有优点,缺点和建议何时使用),请查看2.6 Comparing The Strategies部分。

我不能比他做得更好,所以没有必要解释他,只需参考原始论文。

答案 1 :(得分:0)

Patterns of Enterprice Application ArchitectureSingle-table inheritanceClass-table inheritanceConcrete-table inheritance的章节中也涵盖了这一点。

报道与Pascal所说的类似。没有一种真正的方式,但这本书确实给你一个很好的成本和收益细分,例如

  

具体表继承的优势是:

     
      
  • 每个表都是自包含的,没有不相关的字段。结果是   当被其他人使用时它很有意义   不使用的应用程序   对象。
  •   
  • 从混凝土中读取数据时没有连接要做   映射器。
  •   
  • 只有在访问该类时才能访问每个表,这可以   传播访问负载。
  •   
     

具体表继承的弱点是:

     
      
  • 主键可能难以处理。
  •   
  • 您无法将数据库关系强制实施为抽象类。
  •   
  • 如果域类中的字段在层次结构中向上或向下推,   你必须改变桌子   定义。你不必这样做   类表的变化很大   继承(285),但你不能   单身就可以忽略这一点   表继承(278)。
  •   
  • 如果超类字段发生更改,则需要更改每个表   这个字段因为超类   字段在整个字段中重复   表。
  •   
  • 超类上的查找强制您检查所有表格,这些表格会导致   多个数据库访问(或   奇怪的加入)。
  •