0

我有 5 个 db 表,但我遇到的问题是Student_Answer表,我不知道我是否应该SessionId在该表中包含该字段,因为我们将通过外键知道每个问题属于哪个会话。我想我不妨要求确保:

以下是表格:

会话表

SessionId (auto PK) SessionName
1                   DOEEO
2                   EFOEO
3                   EOEOW

问题表:

QuestionId (Auto PK) QuestionNo  QuestionContent  SessionId (Fk)
1                    1           Question 1       1
2                    2           Question 2       1
3                    3           Question 3       2
4                    4           Question 4       2           
5                    5           Question 5       3

答案表:

AnswerId (Auto PK)  Answer  QuestionId(Fk) 
1                   A       1
2                   C       1
3                   B       2
4                   C       3
5                   A       4
6                   D       5
7                   E       5

学生表:

StudentId (Auto PK)  StudentForename   StudentSurname
1                    Joe               Price
2                    Kyle              May
3                    Mark              Knowles

Student_Answer 表:

StudentAnswerId (auto PK) SessionId(FK) QuestionId (FK) StudentAnswer  StudentId (FK)
1                         1             1               C              1
2                         1             1               B              1
3                         1             1               A              2
4                         1             1               C              2
5                         1             2               C              1
6                         1             2               B              2
7                         2             3               A              1
8                         2             3               C              2
4

2 回答 2

0

您不仅不需要 StudentAnswer 表中的 SessionID 字段,也不需要 StudentAnswerId 字段。您只需要 QuestionID、StudentId 和 StudentAnswer。您的主键是 QuestionId 和 StudentId。

这称为多对多关系。

于 2013-01-31T02:23:02.187 回答
0

如果你这样做了,那将违反规范化规则,所以严格来说答案是否定的。然而,这并不是说非规范化总是不好的。这样做的主要问题是,如果/当您忘记更新两个数字时,检测应用程序中的问题变得更加困难。

如果问题的会话编号一旦设置就不可能更改,那么这不是一个大问题,但是如果它可以更改并且您不在另一个表中更改它,那么这就是一个问题.. . 这就是为什么最好把它放在一个地方。

说了这么多,我想知道您是否将会议保持在最佳开始位置。你能解释一下为什么一个会话应该与问题而不是答案或学生相关联吗?在不了解您的系统的情况下,我的猜测是会话应该保存在学生表而不是问题表上。

编辑:不是将 SessionId 添加到学生答案表中,通常您要做的只是创建一个包含您需要的所有信息的视图。如果视图仅用于人类可读性,那么您甚至不需要包含 id 字段,而只需在视图中显示实际会话名称。但是,如果您只是想创建一些使编码更容易的东西,那么您也可以在视图中包含 id。

于 2013-01-31T02:28:33.140 回答