我需要建议反射(reflect)类对象模型的数据库结构的三种变体。数据库的结构应该允许 了解类继承。 为简单起见,类仅包含属性(不包含方法)。
我考虑单表继承、类表继承、具体表继承模式。
但并非所有事情对我来说都是清楚的。问题是:
1)类存储在数据库中的哪里,类的实例存储在哪里?
2) 比方说,B 类
扩展了A 类
。如何让B
的实例b
理解它是派生的A
?如何让b
明白这是B类
的实例,而不是A类
的实例?
3)是否有一种模式,在继承层次结构中添加新类不需要更改表的结构?
4)是否有允许多重继承的模式?
UPD:可能我表达的想法不够清楚。假设它不是java,而是任何其他语言。这个问题是在数据库结构的背景下提出的。是否有允许多重继承的模式(如上)?
谢谢。
最佳答案
1) Where are classes stored in database, and where are instances of classes stored?
类不存储在数据库中,仅存储实例。在大多数情况下/映射器中,鉴别器会告诉映射器实例的类型/类。
2) Let's say, class B extends class A. How to make instance b of the B understand that it is a derived A? How to make b understand that this is an instance of class B, not class A?
这通常是通过鉴别器列完成的。
至于“如何使 B 的实例 b 理解它是派生的 A”:您可以在代码中执行此操作,即 B extends A
。如果稍后更改,可能会破坏现有数据,因此您需要在设计模型时考虑继承,或者在需要进行更改时制定一些迁移策略。
3) Is there a patter in which an addition of a new class to inheritance hierarchy does not require changing the structure of tables?
这可以通过每类表或连接策略来实现。在这两种情况下,您都需要为新子类添加表,但不必更改现有的表(前提是您已经有一个鉴别器列,否则您必须添加一次) .
4) Is there a patter which allows multiple inheritance?
不,Java 不允许多重继承(这也适用于 orm),并且在大多数情况下都不需要它。尝试组合。
关于java - java类存储在数据库的哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033485/