C# 数据结构多对多(3路)关系
我被这个C#的小项目困住了,但基本上我的问题是: 我正在尝试为考试统计创建一个数据结构。。。 因此: 一个学生可以有许多科目 一门学科可以有很多学生 复杂的部分是,一个科目可以有多次考试(重考),因此一个学生在一个科目上会有很多成绩。。。 我有点不知道如何将其正常化。有人能建议吗?这是我的第一个解决方案:C# 数据结构多对多(3路)关系,c#,data-structures,C#,Data Structures,我被这个C#的小项目困住了,但基本上我的问题是: 我正在尝试为考试统计创建一个数据结构。。。 因此: 一个学生可以有许多科目 一门学科可以有很多学生 复杂的部分是,一个科目可以有多次考试(重考),因此一个学生在一个科目上会有很多成绩。。。 我有点不知道如何将其正常化。有人能建议吗?这是我的第一个解决方案: class StudentRec { string name; string candidate_number; string student_id; List
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;
}
class StudentRec
{
字符串名;
字符串候选_编号;
字符串学生id;
列出模块;
}
班级科目记录
{
字符串主语代码;
第一次考试记录;
考试记录第二次尝试;
考试记录第三次尝试;
}
课堂考试记录
{
弦年;
整数标记;
煤焦品位;
}
然而,如果我这样做的话,每个学生都会有一个相同科目的不同实例
- 学生
- 姓名等
- 主题
- 代码等
- 入学/学生科目(多对多)
- 学生参考资料
- 主题参考
- 入学日期等
- 考试(一对多报名)
- 入学参考
- 考试日期
- 分数/等级
- 学生
- 姓名等
- 主题
- 代码等
- 入学/学生科目(多对多)
- 学生参考资料
- 主题参考
- 入学日期等
- 考试(一对多报名)
- 入学参考
- 考试日期
- 分数/等级
因此,学生注册一个科目->注册。然后,对于一次报名,你可以有很多次考试,每次考试一次来处理重考。基于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;
}
班级学生
{
字符串名;
字符串候选_编号;
字符串学生id;
//一对多
列出模块;
}
班级注册
{
学科;
//一对多
列出考试;
}
班级科目
{
字符串主语代码;
}
课堂考试
{
智力测验;
弦年;
整数标记;
煤焦品位;
}
基于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;
}
班级学生
{
字符串名;
字符串候选_编号;
字符串学生id;
//一对多
列出模块;
}
班级注册
{
学科;
//一对多
列出考试;
}
班级科目
{
字符串主语代码;
}
课堂考试
{
智力测验;
弦年;
整数标记;
煤焦品位;
}
您可以将科目记录添加到学生中,这样学生就有了他正在学习的科目列表,以及他当前和过去所学习科目的结果列表。因此,代码变成:
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;
}
class StudentRec
{
字符串名;
字符串候选_编号;
字符串学生id;
列出模块;
列出受试者的研究结果;
}
班级科目记录
{
字符串主语代码;
第一次考试记录;
考试记录第二次尝试;
考试记录第三次尝试;
}
课堂考试记录
{
弦年;
整数标记;
煤焦品位;
}
如果您想从科目记录和考试记录链接回学生,您可以将学生id添加到这些记录中。您可以将科目记录添加到学生,这样学生就有了他正在学习的科目列表,他也有了他当前和过去所学科目的结果列表。因此,代码变成:
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;
}
class StudentRec
{
字符串名;
字符串候选_编号;
字符串学生id;
列出模块;
列出受试者的研究结果;
}
班级科目记录
{
字符串主语代码;
第一次考试记录;
考试记录第二次尝试;
考试记录第三次尝试;
}
课堂考试记录
{
弦年;
整数标记;
煤焦品位;
}
如果您想从科目记录和考试记录链接回学生,您可以将学生id添加到这些记录中