CSDN博客

img oneGeng

1.2.4 联系

发表于2008/9/28 15:52:00  281人阅读

 在我们的对象模型中,联合代表着两个实体之间的关系。你应该了解User,Address和BillingDetails之间是存在联系的。与Address不同的是,BillingDetails是独立的,它存在一个属于自己的数据表中。联合映射已经实体之间联系的管理是对象持久的核心概念。
在面向对象的语言中,使用对象引用和对象引用集合来表示关联。在关系的世界中,关联使用外键来表示。在这二者之间存在着细微的差别。
面向对象的联系很直接,这种关联从一个对象出发到达另外一个对象,如果你想把这种关系变成双向的,那么就只有再重新定义一个反方向的关系。在我们的对象模型中,你能看到这个:
public class User{
private Set billingDetails;
......
}
public class BillingDetails{
private User user;
..............
}
另一方面,外键链接则不具有方向性。实际上,联系的方向性对于关系数据模型没有任何意义。通过表的joins和projection,你可以创建你所需要的任何联系。
实际上,仅仅通过Java类,你可能无法确定联系的多样性。Java类之间的联系可能是多对多的一种关系。例如,
public class User{
private Set billingDetails;
...
}
public class BillingDetails{
private Set user;
....
}
而数据库表之间往往是一对多或者一对一的关系。你可以通过外键关联立刻看到这种关系。下面的例子是关于一对多的关系的(如果考虑方向性的话,也可以是多对一的关系)
USER_ID BIGINT FOREIGN KEY REFERENCE USER
下面是一对一关系:
USER_ID BIGINT UNIQUE FOREIGN KEY PREFERENCES USER
BILLING_DETAILS_ID BIGINT PRIMARY KEY FOREIGN KEY REFERENCES USER
如果你想在关系数据库中建立多对多的关系的时候,你需要一个中间表,称之为连接表。当然,这个表并不代表任何对象。在我们的例子中,如果想建立这种多对多的关系的话,可以参照如下的代码:
CREATE TABLE USER_BILLING_DETAILS(
USER_ID BIGINT FOREIGN KEY REFERENCES USER,
BILLING_DETAILS_ID BIGINT FOREIGN KEY REFERENCES BILLING_DETAILS PRIMARY KEY(USER_ID,BILLING_DETAILS_ID)
)
我们将在第三章和第六章来讨论关系映射。
迄今为止,我们考虑都是系统静态的视图,但是最困难的问题莫过于对象持久化都是动态的。
0 0

相关博文

我的热门文章

img
取 消
img