【问题标题】:data structure many-to-many(3way) relationship数据结构多对多(3way)关系
【发布时间】:2012-03-24 18:03:31
【问题描述】:

我坚持使用 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;
}

但是,如果我这样做,每个学生都会有同一学科的不同实例。

【问题讨论】:

    标签: c# data-structures


    【解决方案1】:

    类似

    • 学生
      • 姓名等
    • 主题
      • 代码等
    • 注册/学生科目(多对多)
      • 学生参考
      • 主题参考
      • 入学日期等
    • 考试(从注册一对多)
      • 注册参考
      • 考试日期
      • 标记/评分

    所以学生注册一个科目 -> 注册。然后,对于 Enrollment,您可以进行多次考试,每次考试一次以处理重考。

    【讨论】:

      【解决方案2】:

      基于 Mike Q 的回答。

      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;
      }
      

      【讨论】:

        【解决方案3】:

        您可以将科目记录添加到学生,这样学生就有了他正在学习的科目的列表,并且他还有一个他所学习的当前和过去科目的结果列表。于是代码变成了:

          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 链接回 Student,您可以将学生 ID 添加到这些记录中。

        【讨论】:

          猜你喜欢
          • 2015-10-08
          • 2023-03-05
          • 2013-09-29
          • 2012-07-29
          • 1970-01-01
          • 1970-01-01
          • 2011-04-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多