最近我正在开展一个项目,我需要在我的数据库中保存多个科目,并且学生的数量将根据学生的班级进行更改。例如:class" VII"有6个科目(包括1个选项科目),班级" VIII"有8个科目(1个包括选项科目),依此类推。根据学生的选择,即使选项科目也可能不同。
我使用CheckedListBox控件。这是一个截图。
我正在使用MS Sql Server 2012.我很难设计数据库表。我不能理解我应该在学生表中创建所有主题列还是????(最佳方式)。请帮助我,提前谢谢。
答案 0 :(得分:4)
你所描述的是一种被称为多对多关系的东西。许多班级都有很多学生。
您将拥有一个学生表,一个主题表,然后是一个表student_subject表,它连接学生和主题表的主键。
答案 1 :(得分:2)
如果Student
可以有多个Subjects
,和,Subject
可以有多个Students
,那么这就是多对多关系。这意味着需要一个中间表来链接它们。
从对象本身的表开始:
Student
----------
ID
Name
etc.
和
Subject
----------
ID
Name
etc.
由于这些是域中的独立聚合根对象,并且都不拥有另一个,因此它们的表只包含描述该对象的信息。例如,Subject
可以有名称和描述,可能是先决条件列表等。
然后在它们之间创建关系表。通常的做法是组合名称:
StudentSubject
----------
StudentID
SubjectID
如果不能重复两对Student
和Subject
,则两个外键一起可以成为主键。如果可以重复(如果相同的Student
可以多次使用Subject
),那么您可能希望向表中添加单独的主键。
最简单的说,所有这个表都是创建主表中记录之间的关系。但是,这可能会成为一个域实体本身。如果有任何属性描述Student
和Subject
之间的关系,则会将这些属性添加到此表中。
答案 2 :(得分:2)
您的数据库架构看起来应该是......
<强>学生强>
Student_ID(PK)
Student_Name
等.......
<强>主题强>
Subject_ID(PK)
费用
等......
<强> Student_Subjects 强>
Student_ID FK学生(Student_ID)
Subject_ID FK主题(Subject_ID)
DateStarted
等.....