数据库模式 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。

对于开发架构和实体方面的任何帮助,我将不胜感激。

对象模型的设计最终将取决于您最终如何在应用程序中使用对象;但这是一个合理的开始:

我反对将继承作为对任何设计问题的第一反应;所以我建议创建两个 类、MentorMentee,每个都与 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)