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