学生跟踪系统的数据库设计

时间:2012-04-04 10:42:35

标签: database erd

编辑:我修改过的实体关系图 学生可以有很多接触时间,但这与他们的课程无关。所以tblContact中的courseID是不必要的,所以我习惯于tblStudent中的主键与特定导师标记分配的等级以及特定学生使用该TMA的课程相关。 呼

http://i.imgur.com/cf3td.png

/编辑

我的 ERD

ERD

请注意,StudID和CourseID是合并后的复合主键

我的问题:我应该在tblContact中使用studID和courseID吗?或者我应该只有StudID,因为我使用复合主键我认为我应该在tblContact和tblStudentTMA中同时具有这两个值? 这是对的吗?

2 个答案:

答案 0 :(得分:1)

答案取决于联系人是否与课程相关。

如果它与课程相关,那么您需要某种方式从联系人中识别课程,但您可以从tblContact链接到tblCourse表。

我对多对多表的偏好是在示例StudentCourseID中使用单独的主键,这是一个Identity列,这样就无需在相关表中存储多个外键

答案 1 :(得分:0)

tblContact中的主键必须至少有两列。其中一个必须是StudID。

它必须至少有两列,因为您需要为每位学生存储多个联系人。其中一列必须是StudID才能保证联系行是指实际的学生。第二列可能需要是DateOfContact。

主键{StudID,DateOfContact}允许每位学生每天一个联系人。如果您使用{StudID,TimeOfContact} - 使用时间戳而不是日期 - 您每个学生每天可以有多个联系人。

除此之外,如果 tblContact中的每个行都必须同时引用学生和其中一个学生的课程,那么您应该在主键中包含CourseID。您还需要从tblContact(StudID,CourseID)到tblStudentCourse(StudID,CourseID)的外键引用。

如果tblContact中的每一行都没有必要引用一个课程,那么tblContact.CourseID应该是可空的,并且它不应该是主键的一部分。但是你仍然应该有一个从tblContact(StudID,CourseID)到tblStudentCourse(StudID,CourseID)的外键引用。