如何解决这样的引用关系问题?
我想设计一个基于题库中的大量试题可以进行智能组卷的在线考试毕设。但是题库和试卷的关系却令我犯了难
如果试卷直接引用题库中的题目,那么试卷题目如果进行修改那么势必会影响到题库中的题目,而题库中的题目会被多个试卷进行引用,这样一套试卷的题目修改也就会影响到其他试卷的内容。比如每套试卷的计分会有所不同,所以直接引入题库中的试题肯定是行不通的。所以我就想着导入试卷中的题目每次都新增一条,但是这样题库中的数据本来就比较大,在加上每个试卷的引用一次就创建一个副本,这样最终的数据量会很大,查询也十分的缓慢。另一个就是为试卷在创建一系列的表,题目表、选项表、题目选项表、题目知识点表,但是这样其实只是把题库换成了试卷,其他的bean、service基本都是cv一份。就很纠结,所以各位大佬有什么好的建议吗?
============================================================
补一下表设计
试题表
选项表
剩下的题库表、题库试题关联表、知识点表、试题知识点关联表等就不展示了
回答:
在题库的表给每个题增加一个版本的标注,当题库中的题有修改时,把修改后的题作为一个新版本保存。
题库表
题目ID | 题目内容 | 题目版本 | md5 | 题目类型 | 答案 | 解析 | 知识点 |
---|---|---|---|---|---|---|---|
1 | xxxx | v1 | xxxxxx | 选择题 | A | xxx | ccc |
2 | xxxx | v1 | yyyyyy | 填空题 | B | xxx | ccc |
试卷表
试卷ID | 题目ID | 题目版本 | 分值 | 排序 |
---|---|---|---|---|
1 | 1 | v1 | 2 | 1 |
1 | 2 | v1 | 2 | 2 |
2 | 1 | v1 | 3 | 2 |
2 | 2 | v1 | 3 | 1 |
试卷表的试卷和题库中的题目ID+版本号关联起来。
这样就可以题库里面的题更新了,不会影响到之前版本的题目和试卷,因为现在试卷和之前的题目版本是没有变的。
导入试卷本质上应该算是导入题,导入题后,再通过“试卷”把这些题都关联起来。
如果遇到一样的题,那就不用再保存一遍,只要记录这个试卷关联题库中哪个题就行了。
题库里面的题,应该可以给他们加字段,按照类型标注、以及题对应的知识点解析和选项。
回答:
包含关系包含关系
回答:
将“题”和“题的分值”拆分开。
回答:
总体来说,这还是一个数据结构上的问题。从逻辑上来说,就是分析数据的可复用情况,和分析逻辑的可复用情况(函数划分等)是一个道理。
首先,题库提供试题,包含试题的一些基本属性,比如题目、题型(单选、多选、填空、主观……)、难度值、选项列表(选择题)、标准答案/参考答案等,甚至可能会有参考分值。
而试卷则是从题库抽取了试题之后,对试题进行一定的细微处理组成的。试题肯定是直接引用题库中的试题,但有一些细节需要处理,比如分值,比如选项顺序等。
那么,从数据结构上来说,题库中的试题可以看作一个模板数据。而试卷中的试题,引用了这个模板,同时有一些个性化的定义,就像这样:
{ subject: 引用题库中的试题,这在数据库中保存的是一个 ID
value: 分值,
optOrder: [1, 3, 4, 2] - 这是举例,一般可能随机生成
answer: B[3] - 这里看保存修改顺序之后的 ABCD,或者直接给选项 ID 都可以
}
简单地说,就是把不变的和可能变化的划分出来,其中可能变化的部分,又可能需要区分默认值(模板值)和实例值。实例值若存在,覆盖默认值。
以上是 如何解决这样的引用关系问题? 的全部内容, 来源链接: utcz.com/p/944998.html