Как мне смоделировать мою базу данных таким образом, чтобы каждый учащийся в моей базе данных имел оценку, связанную с каждым объектом курса? - PullRequest
0 голосов
/ 21 сентября 2019

Я создаю приложение Java CRUD, которое будет служить инструментом управления колледжем.Моя база данных содержит 5 таблиц (колледж, учебная программа, курс, профессор и студент).Я хотел бы показать и оценить оценку каждого студента для каждого курса.Я обозначил студента и курс как отношения «многие ко многим» -> 1 студент может посещать много курсов одновременно, и на 1 курсе обучается много студентов.Нужно ли создавать дополнительную таблицу или я должен реализовать HashMap, содержащий Student и Integer (класс) в качестве пары ключ-значение внутри моего объекта Course?Или есть гораздо лучший способ добиться этого?

Вот мой POJO для студента:

@Data
@EqualsAndHashCode(callSuper=false)
@Entity
public class Student extends Person implements Serializable{

    private String JMBAG;

    @ManyToMany(mappedBy = "students")
    private List<Course> courses;

}

, а вот мой курс POJO:

@Data
@EqualsAndHashCode(callSuper=false)
@Entity
public class Course extends CollegeManagerEntity implements Serializable {

    private String name;

    private Integer year;

    private Integer ects;

    private Integer numberOfClasses;

    private Integer numberOfAuditorialExercises;

    private Integer numberOfLaboratoryExercises;

    private Integer numberOfConstructionalExercises;

    @ManyToMany
    private List<Professor> professors;

    @ManyToMany
    private List<Student> students;

    @ManyToMany(mappedBy = "courses")
    private List<StudyProgramme> studyProgrammes;

}

1 Ответ

1 голос
/ 21 сентября 2019

Если вы решите использовать HashMap, как это будет реализовано в БД?Как будет выглядеть схема базы данных?

Вам нужна новая таблица, следуя подходам СУБД.Что-то вроде это .Новая сущность будет выглядеть так:

@Entity
public class CourseMember {

    private Long id;

    @ManyToOne
    @JoinColumn(name = "student_id", nullable = false)
    private Student student;

    @ManyToOne
    @JoinColumn(name = "course_id", nullable = false)
    private Course course;

    @Column
    private Integer grade;
}

А затем вам нужно сопоставить вашу новую сущность с классами Student и Course.

@Entity
public class Student {
    ...
    @OneToMany(mappedBy = "student")
    private List<CourseMember> courseMemberList;

}

@Entity
public class Course {
    ...
    @OneToMany(mappedBy = "course")
    private List<CourseMember> courseMemberList;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...