情景:答卷系统的问题库需要支持查看单个问题的编辑历史,所以我想到添加版本号的方式存储
在表结构设计的时候,想过两种方式
[ 1 ] 一个 问题表 + 选项表,问题表和选项表通过一个 groupId + versionId 关联 类似这样的:
问题表:
groupId,versionId,questionName,status,type.....
选项表: groupId,versionId,optionValue,sort.....
这样的话,问题编辑后,原有记录不变,在问题表和选项表中再插入一份 1 对多的数据,保持他们的 groupId 一致,versionId 增加 1
[ 2 ] 只有一个 问题表 上面选项表的内容作为一个字段存储,把 n 个选项转成 json 存储,然后读取的时候,解析出来问题表 groupId,versionId,questionName,status,type,optionJsonValue .....
这样的话,问题编辑后,原有记录不变,在问题表和选项表中再插入一条数据即可,依旧保持 groupId 一致, versionId 增加 1
这两种方式那种比较好呢?
还有没有比较合适的方式?请教各位大佬
1
h2so4 OP [ 2 ] 只有一个 问题表 上面选项表的内容作为一个字段存储,把 n 个选项转成 json 存储,然后读取的时候,解析出来
问题表: groupId,versionId,questionName,status,type,optionJsonValue ..... 这样的话,问题编辑后,原有记录不变,只要在问题表中再插入一条数据即可,依旧保持 groupId 一致,versionId 增加 1 -------------------------------- 更正一下,有一些字打错了 |
2
ebingtel 2019-06-13 08:34:03 +08:00
没有其他的背景描述的话,如果基于 mysql,两种方式都 ok ……
|
3
h2so4 OP @ebingtel #2 是基于 mysql 的,用 json 方式存储的话,可能操作起来方便点,毕竟是个横表,主要考虑的是如果后期拓展的话,哪种方式更好呢? [想了想,在选项表中添加字段,和在 json 中添加字段,似乎也没有什么不同?]
|
4
littlemoney 2019-06-13 09:16:40 +08:00
如果后期拓展字段很多的话,json 存储的问题需要考虑,varchar 设置的很大、或者用 text,如果是 mysql5.7+倒是可以用 json 试试
|
5
kamal 2019-06-13 14:56:14 +08:00
一个思路,供参考:
版本功能只用来展示历史记录,考试和汇总答案时并不会使用到。所以现在设计的基础上只增加一列版本号即可。 历史记录使用新表存储,原来的表只存储最新的版本和版本号。每一行都是有效数据,不保存多余的行。 |