2017-09-23 111 views
0

请考虑以下情况。哪一个更好?

table 1: assessment 

enter image description here

  • 这表明studentID A1001已经采取了assessment_ID:E1。
  • 它显示studentID A1002已经考取了评估ID:E2。
  • 评估ID:E1有5个问题。
  • 评估ID:E2有9个问题。

我需要一张表来存储学生的答案。以下哪一项是更好的方法? enter image description here

两个表中有“REFERENCE_ID”充当引用assessment.id

选项A的外键:我需要插入的问题数(行)+其相应的答案。 选项B:我需要在表格中添加一个新列,每当学生对更多问题进行评估时。

假设评估ID:E3有14个问题,那么我需要将row10〜row14列添加到表中。

我的想法 选项A:在这种情况下创建了许多记录。选项A有14条记录,而选项B只有2条记录。

选项B:某些列被浪费,因为并非所有评估都有9个问题。

在性能,执行速度和存储空间方面哪一个更好?

谢谢。

+1

如果你的列名包含数字,你正在做一些非常错误的事情。选项B非常有效 –

+0

选项B根本不会扩展......每次接收新数据时,都会增加列。这在Excel中甚至不是一个好选择。 –

+0

肯定选项A.你永远不应该与你的价值水平。如果以后通过40个问题进行测试,该怎么办?与A一起去,不要忘记定义合适的索引,它会很好。 –

回答

1

简短版本:选项A是更好的答案最多的时候。这里有详细的explanation的原因。

中等版本:选项A将占用更多空间。执行速度将取决于您正在运行的查询。

长版本:添加新评估不需要在选项A下进行任何代码更改。您只需定义问题即可。 (我也可能会添加一个名为“问题”的表,其中包含问题!)

美中不足:ONE问题会使选项A变得很痛苦,如果你想在列中显示答案。因为那样你就必须拥有支持答案表的代码。

分割镜头:“选择一个数据表示,使程序变得简单。” (Elements of Programming Style,规则12)。因此,当您考虑如何设计数据库时,请考虑您将如何使用它的方式,并选择使您的代码易于编写的设计。

+0

谢谢!这对我来说非常有帮助。 – ethan17