最近,我一直在计划一个允许用户自定义和添加到Web界面的系统。该应用程序可以与测验创建系统进行比较。我遇到的问题是如何设计一个允许"变量"应用程序的附加数量。
我研究的第一个选项是为添加创建一个对象,然后将其序列化并将其放入自己的列中。内容不会经常被编辑,因此写作将是最小的,然而读取将是非常频繁的。 (缓存可以用来削减)
另一种选择是使用除mysss或postgresql之外的其他东西,例如cassandra。我之前从未使用过其他数据库,但如果能够改进系统的设计,我们会有兴趣学习如何使用它们。
对此主题的任何意见都表示赞赏。
谢谢。
* 修改 29/3/14
有关正在更改的数据的一些信息。对于我上面使用序列化对象的想法,您可以说在表格中我会存储测验的名称,测验值的点数,然后是一个名为测验数据的列,用于存储包含信息的序列化对象在问题上。总的来说,对象看起来像这样:
Questions(Array):{
[1](Object):Question{
Field-type(int):1
Field-title(string):"Whats your gender?"
Options(Array):{"Female", "Male"}
}
[2](Object):Question{
Field-type(int):2
Field-title(string):"Whats your name?"
}
}
结构可能会有所不同,但通常我会存储整数来确定测验中的字段类型,然后是一个字段来保存字段的标签和该字段的选项(如果有的话)。 / p>
答案 0 :(得分:1)
在这种情况下,我建议查看MongoDB。
但是,如果您想使用MySQL,可以考虑设计中的entity-attribute-value模型。 EAV模型允许您设计包含可变数量属性的条目。
修改强>
在您要存储的数据类型的更新后,您可以按如下方式映射您的设计:
+-------------------------------------+
| QuizQuestions |
+----+---------+----------------------+
| id | type_id | question_txt |
+----+---------+----------------------+
| 1 | 1 | What's your gender? |
| 2 | 2 | What's your name? |
+----+---------+----------------------+
+-----------------------------------+
| QuestionTypes |
+----+--------------+---------------+
| id | attribute_id | description |
+----+--------------+---------------+
| 1 | 1 | Single select |
| 2 | 2 | Free text |
+----+--------------+---------------+
+----------------------------+
| QuestionValues |
+----+--------------+--------+
| id | question_id | value |
+----+--------------+--------+
| 1 | 1 | Male |
| 2 | 1 | Female |
+----+--------------+--------+
+-------------------------------+
| QuestionResponses |
+----+--------------+-----------+
| id | question_id | response |
+----+--------------+-----------+
| 1 | 1 | 1 |
| 2 | 2 | Fred |
+----+--------------+-----------+
这将允许您动态添加不同类型(QuestionTypes)的各种不同问题(QuizQuestions),然后使用不同的选项(QuestionValues)限制它们并存储这些响应(QuestionResponses)。