在定义父子关系时,我们如何确定哪个表应该是父表,哪个表应该是Child表。
比如说我在hibernate中创建一对一的关系。现在我如何决定哪个表应该是父表,哪个表应该是子表。
我们是否有任何拇指规则或任何准则。
同时在hibernate中定义一对一映射时,我应该在哪个表中定义关系。例如,我们指定以下标记来定义关系<one-to-one></one-one>.
如果关系是单向的,它应该在父表还是子表中。
我也经历了以下链接
Which table should be Parent table and which should be child table?
Which Table Should be Master and Child in Database Design
请建议。
是否必须将包含主键的表视为父表?
答案 0 :(得分:0)
1)我们不应该关心hibernate中的表(Parent / Child)。你应该做的是用Java实现你的软件设计(面向对象的方法),hibernate将根据你的软件/项目设计来完成它的工作。
项目的设计不应该对任何API(如hibernate)有任何实现依赖。
例如:让我们在你的设计中说你想要实现一个 is-a 关系(继承)的场景,比如&#34;有两个公司中的员工类型为常规员工和合同员工。&#34;
这个场景可以在java中实现,如下所示:
class Employee {
private int id; //applicable for both types of employees
private String name; //applicable for both types of employees
//getters and setters
}
class Contract_Employee extends Employee{
private float pay_per_hour;
private String contract_duration;
//getters and setters
}
class Regular_Employee extends Employee{
private float salary;
private int bonus;
//getters and setters
}
它与hibernate的映射可以完成如下:
<hibernate-mapping>
<class name="com.stack.Employee" table="emp" discriminator-value="emp">
<id name="id">
<generator class="increment"></generator>
</id>
<discriminator column="type" type="string"></discriminator>
<property name="name"></property>
<subclass name="com.stack.Regular_Employee" discriminator-value="regular_emp">
<property name="salary"></property>
<property name="bonus"></property>
</subclass>
<subclass name="com.stack.Contract_Employee" discriminator-value="contract_emp">
<property name="pay_per_hour"></property>
<property name="contract_duration"></property>
</subclass>
</class>
</hibernate-mapping>
由于Hibernate是ORM框架,它支持这种关系,它必须。 hibernate框架中正在进行大量的演变5.x是最近的演变。以便解决许多现实问题。
2)请记住,所有关系(@ OneToMany,@ OneToOne,@ ManyToMany,@ ManyToOne等)都是面向对象的方法来解决特定的现实问题。
所以一旦你创建了用于实现这些关系的java类,您希望使用ORM将对象存储在数据库中,您只需按原样保持关系并按照ORM框架执行相应的映射。
在实现hibernate时,您不应该更改或决定父/子表的内容。这是在实现java类之前决定的。
3)因此,拇指规则依赖于您的项目设计/要求,而不是它在休眠中的实现。
应该更改/(添加新的)后端api以实现设计。这是因为,良好的软件设计并不依赖于其底层实现。
4)数据库设计应根据USE-CASE的设计方式完成。在用例图中,实体之间的所有关系都是为场景定义的。
建议:只需充分利用ORM框架,即可实现您的要求。
让设计师完成他们的工作,开发人员按照设计师的意愿实现设计。