为了简单起见,假设我有一个问题。在
每个答案得一分。在
有些问题属于定性问题,因此用户必须在文本答案中进行选择。在
你最喜欢的宠物是什么?
回答我得2分。在
有些问题定量,因此用户输入一个数字,然后使用线性插值进行评分:
你一天喝多少啤酒?
如果我回答2升我得到3分。在
现在,我使用sqlalchemy,并有一个表,其中每行都有一个答案:
questions
id PK
name String
quantitative Bool
answers
id Integer PK
id_question Integer FK
value String
每次我都要将answers.value
转换为float,以便进行插值等等。在
我可以将列名value
改为_value
,并为{answer._value
,如果问题是数字(answer.question.quantitative
是True
)
我可以用单独的列来回答文本和数值(比如value
和{
或者。。。
什么东西应该更高效、更容易使用?在
请考虑一下SQLAlchemy magic,它可以处理很多肮脏的工作,我希望它保持简单。在
编辑:
因为啤酒的例子可能会误导我,所以我结合另一个例子:
问:你在慈善事业中用美元捐了多少钱?
就像pets&beer question我有答案值"0"
,"10"
,"100"
作为字符串存储在数据库中的answers.value
列中,这样就可以插入值来获得答案的分数50
我有所有的时间将{
在这里,我在同一个db列中混合了内容类型。在
对于一个快速而肮脏的解决方案,我建议至少使用两个不同的列来存储不同的答案。您还可以向数据库添加CHECK约束,以确保其中一个用于任何行,另一个为NULL。然后使用quick-n-dirty代码计算总得分。在
另一种选择
其思想是建立适当的对象模型,将其映射到RDMBS中,这样就不需要问问题了。另外,我还希望在使用Single Table Inheritance时,生成的DB模式几乎与当前实现相同(当您使用选项
echo=True
运行脚本时,可以看到模型):下面的代码是一个完整的工作脚本,它显示了对象模型、它到数据库的映射以及使用场景。在设计时,该模型很容易扩展到其他类型的问题/答案,而不会对现有类产生任何影响。基本上,你得到更少的黑客和更灵活的代码,仅仅因为你有一个对象模型,正确地反映你的情况。代码如下:
^{pr2}$我希望这个版本的代码能回答评论中提出的所有问题。在
使这一问题变得不必要复杂的是试图优化定量答案。在
这是多项选择。把定量的答案当作是定性的。把“点”作为每个答案的单独属性。在
是的,数据库中会有(“3升”,3)。是的,对一个有思想的人来说,这似乎是多余的。在
把定性和定量的答案完全分开来考虑,但要把它们完全排除在外。在
编辑。不要将答案存储为数字。这完全是错误的。在
正确。在
不正确。在
像对待宠物一样去查他们。这是一个简单的连接。做任何事都要像对待宠物一样。将所有数据视为“定性”。一条简单的规则;不是两条规则。这是正确和标准的解决方案。在
相关问题 更多 >
编程相关推荐