数据库模式 Mentor 和 Mentee 关系及其使用 JPA 的表示
Database Schema Mentor and Mentee relationship and it's representation using JPA
我正在尝试为我想创建的系统寻找一个合适的数据库模式。
该系统供用户注册课程,并允许那些有导师的用户监控他们的学员注册的课程的状态。导师可以是学员,学员可以是导师,每个学员只能有一个导师,每个导师可以有0个或多个学员。
我想到的是让系统中所有用户中的一个用户 table 每个人都有一个唯一的键,然后两个 tables,导师和受训者,包含映射的外键给用户 table 取决于他们是导师还是受训者或两者兼而有之。在 mentee table 中,另一列将是导师 ID 的外键,在导师 table 中,另一列将是该导师下的 mentee id 列表。
现在对于 JPA,我不确定如何创建这些关系,甚至我目前对模式的想法是否合理。一件事是创建一个用户实体,并拥有一个对用户实体进行子类化的导师和受训者实体。我相信 JPA 会为每个实体创建一个单独的 table。
对于开发架构和实体方面的任何帮助,我将不胜感激。
对象模型的设计最终将取决于您最终如何在应用程序中使用对象;但这是一个合理的开始:
我反对将继承作为对任何设计问题的第一反应;所以我建议创建两个 类、Mentor
和 Mentee
,每个都与 User
有 @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;
...
}
这些 类 映射到如下所示的三个表:
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)
我正在尝试为我想创建的系统寻找一个合适的数据库模式。
该系统供用户注册课程,并允许那些有导师的用户监控他们的学员注册的课程的状态。导师可以是学员,学员可以是导师,每个学员只能有一个导师,每个导师可以有0个或多个学员。
我想到的是让系统中所有用户中的一个用户 table 每个人都有一个唯一的键,然后两个 tables,导师和受训者,包含映射的外键给用户 table 取决于他们是导师还是受训者或两者兼而有之。在 mentee table 中,另一列将是导师 ID 的外键,在导师 table 中,另一列将是该导师下的 mentee id 列表。
现在对于 JPA,我不确定如何创建这些关系,甚至我目前对模式的想法是否合理。一件事是创建一个用户实体,并拥有一个对用户实体进行子类化的导师和受训者实体。我相信 JPA 会为每个实体创建一个单独的 table。
对于开发架构和实体方面的任何帮助,我将不胜感激。
对象模型的设计最终将取决于您最终如何在应用程序中使用对象;但这是一个合理的开始:
我反对将继承作为对任何设计问题的第一反应;所以我建议创建两个 类、Mentor
和 Mentee
,每个都与 User
有 @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;
...
}
这些 类 映射到如下所示的三个表:
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)