用于存储语句的数据库结构和具有内嵌图像的4个选项

时间:2013-05-18 17:44:47

标签: sql database database-design

我有一个声明可以有多个内联块图像(比如说数学公式)并有4个相关的选项(比如在测验中),并且每一个都可以有任意数量的内嵌图像。

我以天真的方式知道我可以为每个人存储HTML

Q_ID|Ques|Number Of Choices| Choice A | Choice B | Choice C | Choice D 

或者我们可以有一个问题表

Q_ID|Ques| Q_contains_image| Number Of Choices| Choice A | Choice ID| Choice_contains_image| Choice B | ....Choice C... | Choice D ...

和图像表

Img_Id|Q_ID/CHoice_ID|Image_path

我仍然不知道它们是否是最佳方式,如果我们需要使用HTML中的选项呈现问题,第二种方式将如何影响性能。我不喜欢第一种方式,因为这需要对HTML中的路径进行硬编码,并且当您通过SQL查询看到HTML时,HTML永远不会很好阅读。

我想知道一些很好的方法来存储它们以及使用好方法的隐含成本。

1 个答案:

答案 0 :(得分:2)

我们normalize数据。通过规范化数据,我们消除了数据中的冗余,并将所需的存储量降至最低。

您需要连接表才能获取所有信息。连接表是关系数据库的设计目的,因此它们可以快速连接表。

Question
--------
Question ID
Question Text

Answer
------
Answer ID
Question ID
Answer Text

Correct Answer
--------------
Correct Answer ID
Question ID
Answer ID

Question Image
--------------
Question Image ID
Question ID
Question Image

Answer Image
------------
Answer Image ID
Answer ID
Answer Image

在上述每个表中,第一个ID字段是主(聚类)键。主键是自动递增的整数或长整数。

第一个字段后面的任何ID字段都是使用主键指向表的外键。

在“正确答案”表中,您有一个额外的唯一索引(问题ID,答案ID)。

您不在任何数据库列中存储HTML。您存储文本或图像。

编辑回答评论中的问题。

  

我是否应该在问题/图像表中为图像添加标记,或者您建议我根据图像表中的匹配或不匹配来推断它。

您可以在图像表中获取行或没有行的基础上推断出它。

  

你的正确答案是什么意思?假设我有一个问题,选择a,b,c,d和a,b是正确的。您如何建议我在这里提供这些数据?

如果您对某个问题有多个正确答案,则“正确答案”表格中有多行。对于示例中的两行,问题ID都是相同的,白色答案ID将指向两个正确的答案。