我有一个声明可以有多个内联块图像(比如说数学公式)并有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永远不会很好阅读。
我想知道一些很好的方法来存储它们以及使用好方法的隐含成本。
答案 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将指向两个正确的答案。