Java 数据库模式导师和学员关系及it';使用JPA的s表示
我正试图为我想要创建的系统找到一个合适的数据库模式 该系统供用户注册课程,并允许那些有导师的用户监控其学员注册的课程的状态。导师可以是学员,学员也可以是导师,每个学员只有一个导师,每个导师可以有0个或更多学员 我想到的是让系统中的所有用户都有一个用户表,每个用户都有一个唯一的键,然后是两个表,mentor和mentee,它们包含映射到用户表的外键,具体取决于它们是mentor还是mentee,或者两者都是。在学员表中,另一列是导师id的外键,在导师表中,另一列是该导师下的学员id列表 现在对于JPA,我不知道如何创建这些关系,甚至不知道我目前对模式的想法是否合法。一件事是创建一个用户实体,并拥有一个导师和学员实体,该实体是用户实体的子类。我相信JPA将为每个实体创建一个单独的表Java 数据库模式导师和学员关系及it';使用JPA的s表示,java,jpa,database-design,relational-database,database-schema,Java,Jpa,Database Design,Relational Database,Database Schema,我正试图为我想要创建的系统找到一个合适的数据库模式 该系统供用户注册课程,并允许那些有导师的用户监控其学员注册的课程的状态。导师可以是学员,学员也可以是导师,每个学员只有一个导师,每个导师可以有0个或更多学员 我想到的是让系统中的所有用户都有一个用户表,每个用户都有一个唯一的键,然后是两个表,mentor和mentee,它们包含映射到用户表的外键,具体取决于它们是mentor还是mentee,或者两者都是。在学员表中,另一列是导师id的外键,在导师表中,另一列是该导师下的学员id列表 现在对于J
如果您能帮助我开发模式和实体,我将不胜感激。对象模型的设计最终将取决于您在应用程序中使用对象的方式;但这是一个合理的开端: 我倾向于将继承作为对任何设计问题的第一反应;因此,我建议创建两个类,
Mentor
和Mentee
,每个类都与@OneToOne
用户有关系,并且它们之间有明显的关系。例如:
@Entity
public class User {
@Id
private int id;
private String name;
...
}
@Entity
public class Mentee {
@Id
private int id;
@OneToOne
@JoinColumn(name="USER_ID")
private User user;
@ManyToOne
@JoinColumn(name="MENTOR_ID")
private Mentor mentor;
...
}
@Entity
public class Mentor {
@Id
private int id;
@OneToOne
@JoinColumn(name="USER_ID")
private User user;
@OneToMany(mappedBy="mentor")
private Collection<Mentee> mentees;
...
}
你知道如果在JPA中我让实体扩展用户实体,并且只有用户实体有ID,会生成什么样的模式吗?我想这取决于你使用的JPA实现(例如Hibernate)。我不太喜欢模式(或实体)生成。JPA的一个主要优点是它允许您在映射的两侧都有很大的灵活性;因此,您可以更恰当地建模对象和关系。
USER
ID : INT (primary key)
NAME : STRING
MENTEE
ID : INT (primary key)
USER_ID : INT (foreign key to USER)
MENTOR_ID : INT (foreign key to MENTOR)
MENTOR
ID : INT (primary key)
USER_ID : INT (foreign key to USER)