Answers:
看来您已经被告知您正在走EAV模型的道路。请看此处的图片,了解为什么应不惜一切代价避免使用EAV模型。
上图的负责人Bill Karwin写了一本书“ SQL Antipatterns:避免数据库编程的陷阱”,他将第一章专门介绍EAV反模式。他还是该小组的重要人物,并且在StackOverflow(针对数据库问题)方面也很出色。
我的建议是为每种结果类型都有一张表,然后VIEW
在必要时使用s来组合它们。
例如,您可能有
CREATE TABLE char_result
(
question_id INT,
user_id INT,
cresult CHAR,
result_correct BOOLEAN (or equivalent in your RDBMS)
..
<other stuff>
..
);
对num_result进行相同的操作,除了用nresult INT(FLOAT ...等等)代替cresult-VARCHAR&c的想法相同。
然后VIEW
在result_correct
(和其他字段number_of_attempts
-...&c。-无论其他字段是什么)的不同结果表上创建。在这种情况下,您正在像按“喜欢”进行比较,而不是执行计算,等同于根据上面引用的搞笑图像将人口增加到海拔!
我认为,如果绝对有必要以这种方式在关系数据库中存储值,我会使用Microsoft SQL Server的JSON列之类的解决方案。