哪个数据库表更好?

时间:2012-10-02 00:06:27

标签: mysql sql database

我只是想要一些建议,在数据库中创建“问题”表时,我是否需要在每个问题的问题编号中存储,或者这是不需要的,因为每个问题都有自己的唯一ID,这要归功于自动增量和当学生参加考试时,每个学生的问题将以随机顺序出现,因此他们无法复制答案。

换句话说,问题表应该是这样的(例1):

    QuestionId (int 11) auto increment PK  //unique identifier for each question
    QuestionNo (int 3) //the question number
    QuestionContent (varchar 800) //the question itself
AnswerId (int 11) //Foreign key to AnswerId in Answer Table

或者它应该是这样的(例2):

    QuestionId (int 11) auto increment PK  //unique identifier for each question
    QuestionContent (varchar 800) //the question itself
AnswerId (int 11) //Foreign key to AnswerId in Answer Table

4 个答案:

答案 0 :(得分:2)

我想你回答了自己的问题。自动增量PK字段表示每个问题都有唯一的ID号。您需要提供另一个问题编号字段的唯一原因是,您是否需要能够根据已经确定的其他编号系统查找问题,或者问题编号是否具有其他一些意义。

答案 1 :(得分:1)

我会将QuestionNo作为加入测试和问题的表格字段。例如,我会有一个Question_on_Test包含该字段,因为它只与特定的测试修订相关,而与问题本身无关。

答案 2 :(得分:0)

在您的第二个设计中,如果您从数据库中删除问题(无论出于何种原因),您将丢失该问题的ID号。这可能对您的设计至关重要。

答案 3 :(得分:0)

我不认为在问题表中有一个AnswerID是有意义的。这假设一个问题(一对多关系)可能有几个答案。通常有一个正确的答案和几个错误的答案。

如果每个问题只有一个答案,则不需要在单独的表中。

编辑:而且,由于问题可以随机排序,因此问题编号毫无意义。

我认为答案表应该是:

int AnswerID  (unique ID)
char AnswerChar (A, B, C, D, E)
int QuestionID (parent Question ID)
bool IsCorrect
text AnswerText