2016-09-29 33 views
0

如何确定哪个表应该是父表以及哪个表应该是定义父子关系时的子表。如何确定哪些应该是父表以及哪些应该是定义父子关系时的子表

说例如我在休眠创建一对一的关系。现在我怎么能决定哪个表应该是父母,哪个应该是孩子。

我们是否有任何拇指规则或任何指导方针。

此外,虽然在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

1)我们不应该在乎hibernate中的表(父/子)。你应该做的是用Java实现你的软件设计(面向对象的方法),休眠将按照你的软件/项目设计来完成它的工作。
你的项目的设计不应该有像hibernate这样的任何API的实现依赖。

例如:让你的设计说你有,你想实现一个场景的是,一个关系(继承),如“有两种员工在公司定期和合同工“。
这种情况可以在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是最近的一个。以解决许多现实世界的问题。请记住,所有关系(@OneToMany,@OneToOne,@ManyToMany,@ManyToOne等)都是面向对象的方法来解决特定的现实世界问题。
因此,一旦创建了用于实现这些关系的java类&,您想要使用ORM将对象保存为数据库,您只需保持该关系,并根据ORM框架执行相应的映射。
在执行hibernate时,您不应该更改或决定父/子表是什么。这是在实现你的java类之前决定的。

3)因此,拇指规则是依赖于您的项目设计/要求,而不是在hibernate中的实现。
为了实现设计,应该更改/(添加新的)后端api。这是因为,一个好的软件设计并不依赖于它的底层实现。

4)数据库设计应根据USE-CASE的设计方式来完成。在用例图中,您为实例定义了实体之间的所有关系。

建议:只要充分利用ORM框架,以实现您的要求。
让设计师完成他们的工作,然后开发人员按照设计师的要求实施设计。

相关问题