0

编辑:我修改后的实体关系图一个学生可以有很多联系时间,但这与他们所学的课程无关。所以 tblContact 中的 courseID 是不必要的,所以我习惯于 tblStudent 中的主键与特定导师标记的作业的成绩以及特定学生使用该 TMA 的课程相关。唷

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

/编辑

我的ERD

ERD

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

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

4

2 回答 2

1

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

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

我对多对多表的偏好是在您的示例中使用单独的主键StudentCourseID,这是一个标识列,这消除了在相关表中存储多个外键的需要。

于 2012-04-04T11:04:04.310 回答
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) 的外键引用。

于 2012-04-04T11:18:06.387 回答