标题说的不够清楚,具体是这样的:
有一个附件表,一个用户表,一个课程表,一个实验表。
一个附件属于某个用户的某个课程的某个实验,但是一个用户可以有多个附件,一个课程也可以有多个附件,一个实验也能有多个附件。
所以就成了:
[code="java"]public class Attachment {
@ManyToOne
//用户
public User user;
@ManyToOne
//课程
public Course course;
//实验
@ManyToOne
public Task task;
}
[/code]
感觉这样设计初始化时需要同时获得user,course和task。 比较麻烦,这样设计是不是有问题? 更合理的设计是怎样的? 请指教。
我觉得这样设计没有什么问题
多对一,这样设计不感觉有问题。
如果 “一个用户表,一个课程表,一个实验表 ”它们三个的附件没有关系的话,你可以把附件表拆成三个。 这样有助于查询速度。。
一个附件属于某个用户的某个课程的某个实验。
我理解的意思是“一个用户可以有多个课程,一个课程也可以有多个实验,一个实验也能有多个附件”,实验和附件应该是聚合或组合关系
类关系图如下
User(1) - (*)Course(1) - (*)Task(1) - (*)Attachment
Attachment应该如下:
[code="java"]
public class Attachment {
//实验
@ManyToOne
public Task task;
}
[/code]
@ManyToOne
//用户
public User user;
@ManyToOne
//课程
public Course course;
这两个是冗余属性,如果是经常要用到又有性能问题,可以冗余过来(从本例来看,这两个冗余属性应该是不会变化的,如果变化还要考虑数据同步问题)。
另外,还可以考虑延迟加载嘛