存储多个主题的最佳数据库设计是什么?

时间:2014-12-31 16:06:07

标签: c# sql-server sql-server-2012

最近我正在开展一个项目,我需要在我的数据库中保存多个科目,并且学生的数量将根据学生的班级进行更改。例如:class" VII"有6个科目(包括1个选项科目),班级" VIII"有8个科目(1个包括选项科目),依此类推。根据学生的选择,即使选项科目也可能不同。

我使用CheckedListBox控件。这是一个截图。

enter image description here

我正在使用MS Sql Server 2012.我很难设计数据库表。我不能理解我应该在学生表中创建所有主题列还是????(最佳方式)。请帮助我,提前谢谢。

3 个答案:

答案 0 :(得分:4)

你所描述的是一种被称为多对多关系的东西。许多班级都有很多学生。

您将拥有一个学生表,一个主题表,然后是一个表student_subject表,它连接学生和主题表的主键。

Reference: Many to Many

答案 1 :(得分:2)

如果Student可以有多个SubjectsSubject可以有多个Students,那么这就是多对多关系。这意味着需要一个中间表来链接它们。

从对象本身的表开始:

Student
----------
ID
Name
etc.

Subject
----------
ID
Name
etc.

由于这些是域中的独立聚合根对象,并且都不拥有另一个,因此它们的表只包含描述该对象的信息。例如,Subject可以有名称和描述,可能是先决条件列表等。

然后在它们之间创建关系表。通常的做法是组合名称:

StudentSubject
----------
StudentID
SubjectID

如果不能重复两对StudentSubject,则两个外键一起可以成为主键。如果可以重复(如果相同的Student可以多次使用Subject),那么您可能希望向表中添加单独的主键。

最简单的说,所有这个表都是创建主表中记录之间的关系。但是,这可能会成为一个域实体本身。如果有任何属性描述StudentSubject之间的关系,则会将这些属性添加到此表中。

答案 2 :(得分:2)

您的数据库架构看起来应该是......

<强>学生
 Student_ID(PK)
Student_Name
等.......

<强>主题
Subject_ID(PK)
费用 等......

<强> Student_Subjects
Student_ID FK学生(Student_ID)
Subject_ID FK主题(Subject_ID)
DateStarted 等.....