0

我有一个语句,它可以有多个内联块图像(比如数学公式),并且有 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 永远不会很好阅读。

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

4

1 回答 1

2

让我们规范化数据。通过规范化数据,我们消除了数据中的冗余并将所需的存储减少到最低限度。

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

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 存储在任何数据库列中。您存储文本或图像。

编辑以回答评论中的问题。

我是否应该在问题/图像表中为图像设置一个标志,或者您建议我根据从图像表中获得匹配或不匹配来推断它。

您根据从图像表中获得一行或没有行来推断它。

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

如果您对一个问题有多个正确答案,则正确答案表中有不止一行。在您的示例中,两行的问题 ID 相同,白色的答案 ID 将指向两个正确答案。

于 2013-05-19T00:36:00.290 回答