我有两个课程Parent
和Child
。
class Child extends Parent {
private String extraField1;
private String extraField2;
...
}
Child
课程有2个额外字段extraField1
和extraField2
。
Q1。我应该做两个差异。数据库中的表格:一个用于Child
,另一个用于Parent
?
或
Q1。我应该在Parent
表中添加两列(每列增加一个额外字段),并将Child
存储在Parent
表中。
=============================== EDITED =============== ========================
是的,Child
和Parent
是同一层次结构中的类。
答案 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 Architecture在Single-table inheritance,Class-table inheritance和Concrete-table inheritance的章节中也涵盖了这一点。
报道与Pascal所说的类似。没有一种真正的方式,但这本书确实给你一个很好的成本和收益细分,例如
具体表继承的优势是:
- 每个表都是自包含的,没有不相关的字段。结果是 当被其他人使用时它很有意义 不使用的应用程序 对象。
- 从混凝土中读取数据时没有连接要做 映射器。
- 只有在访问该类时才能访问每个表,这可以 传播访问负载。
具体表继承的弱点是:
- 主键可能难以处理。
- 您无法将数据库关系强制实施为抽象类。
- 如果域类中的字段在层次结构中向上或向下推, 你必须改变桌子 定义。你不必这样做 类表的变化很大 继承(285),但你不能 单身就可以忽略这一点 表继承(278)。
- 如果超类字段发生更改,则需要更改每个表 这个字段因为超类 字段在整个字段中重复 表。
- 超类上的查找强制您检查所有表格,这些表格会导致 多个数据库访问(或 奇怪的加入)。