структура данных отношение многие ко многим (3way) - PullRequest
0 голосов
/ 24 марта 2012

Я застрял с этим небольшим проектом на C #, но в основном моя проблема заключается в следующем: Я пытаюсь создать структуру данных для статистики экзамена ... Так: один студент может иметь много предметов и один предмет может иметь много студентов сложная часть состоит в том, что один предмет может иметь несколько экзаменов (повторных экзаменов), поэтому у студента будет много результатов по одному предмету ... Я вроде как потерял, как это нормализовать. Кто-нибудь может подсказать? это мое первое решение:

class StudentRec
{
    string name;
    string candidate_number;
    string student_id;
    List<Subject> modules;
}

class Subject_Record
{
    string subject_code;
    Exam_Record first_attempt;
    Exam_Record second_attempt;
    Exam_Record third_attempt;

}

class Exam_Record
{
   string year;
   int mark;
   char grade;
}

однако, если бы я сделал это таким образом, у каждого студента был бы другой экземпляр одного и того же предмета.

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

Что-то вроде

  • Student
    • имя и т. Д.
  • Тема
    • код и т. Д.
  • Зачисление / Студент-предмет (многие ко многим)
    • ссылка на студента
    • ссылка на тему
    • дата зачисления и т. Д.
  • Экзамен (один ко многим из зачисления)
    • Ссылка на регистрацию
    • дата экзамена
    • марка / марка

Итак, студент записывается на предмет -> Регистрация. Тогда для зачисления у вас может быть много экзаменов, по одному на каждое заседание, чтобы справиться с повторами.

1 голос
/ 24 марта 2012

Основано на ответе Майка К.

class Student
{
    string name;
    string candidate_number;
    string student_id;

    // One to many
    List<Enrollment> modules;
}

class Enrollment
{
    Subject subject;

    // One to many
    List<Exam> exams;
}

class Subject
{
    string subject_code;
}

class Exam
{
    int attempt;
    string year;
    int mark;
    char grade;
}
0 голосов
/ 24 марта 2012

Вы можете добавить записи о предмете к ученику, чтобы у него был список предметов, которые он изучает, а также список результатов по текущим и прошлым предметам, которые он изучал. Таким образом, код становится:

  class StudentRec
  {
    string name;
    string candidate_number;
    string student_id;
    List<Subject> modules;
    List<Subject_Record> subject_results;
 }

 class Subject_Record
 {
    string subject_code;
    Exam_Record first_attempt;
    Exam_Record second_attempt;
    Exam_Record third_attempt;   
 }

 class Exam_Record
 {
   string year;
   int mark;
   char grade;
 }

Если вы хотите связать Subject_record и Exam_Record со студентом, вы можете добавить идентификатор студента в эти записи.

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