mysql - 有n列可以吗?

时间:2013-03-30 20:56:23

标签: mysql

我知道有可能有n个列,但它是否正确的mysql“编码标准”?

以下是我正在做的事情:

我是一张桌子student,其中包括所有学生信息,包括testScores:

student
-------
studId
name
age
gender
testId

我没有将每个单独的测试答案放在student表中,而是制作了一个名为testAnswers的单独表格,用于保存每个学生的测试结果:

testAnswers
-----------
testId
ques1
ques2
.
.
.
quesN

testAnswers表中的每个条目都对应表student中的特定学生。

当然,每年测试问题可能会发生变化,会有一位管理员能够添加问题并删除问题。因此,如果管理员要删除答案,那么这意味着其中一个列将被删除。

重申一下自己,我知道可以在mysql中编辑和删除表中的列,但这是不错的“编码标准”?

3 个答案:

答案 0 :(得分:1)

使用两个表格!

您所描述的内容是one to many关系,因为可以one学生到many个测试分数。您需要将id作为student_id的外键,并将此id放在testAnswers表中。然后,您可以设置约束,告诉数据库如何处理数据删除。

正如一位评论者提到的那样,使用一个表会导致中断1nffirst normal form,这基本上表示在给定特定记录的情况下,您不能为单个列提供多个值 - 您可以'对于给定表中的同一用户,t具有多个测试分数,而是将数据分成两个表。

答案 1 :(得分:1)

答案很简单明了:。除了很少的角落情况之外,这不是你应该怎么做的。

解决此问题的常用方法是规范化数据库。规范化遵循标准过程(除其他外)避免使用具有列名ques1, ques2, ques3 ...的表。

此过程将引导您进入包含三个表的数据库:

students - 适用于每个学生的身份证,姓名和其他内容

questions - 每个问题的ID和问题文本

answers - 这是学生之间的N:M关系:student_id,question_id,answer_value

答案 2 :(得分:0)

...当然2个表,也可以使用3,只记得在testAnswers表中插入一个studId列(使用REFERENCE到student表)和INNER JOIN testAnswers ON student.studId = testAnswers.studId at SELECT查询(读取数据)。