最近我一直在规划一个允许用户自定义并添加到 Web 界面的系统。该应用程序可以与测验创建系统进行比较。我遇到的问题是如何设计一个架构,允许对应用程序进行“可变”数量的添加。
我研究的第一个选项是为添加内容创建一个对象,然后将其序列化并将其放入自己的列中。内容不会经常编辑,因此写作会很少,但阅读会很频繁。 (可以使用缓存来减少)
另一个选项是使用 mysql 或 postgresql 以外的其他东西,例如 cassandra。我以前从未使用过其他数据库,但如果它们能够改进系统的设计,我有兴趣学习如何使用它们。
任何有关该主题的意见都将不胜感激。
谢谢。
*编辑2014年3月29日
有关正在更改的数据的一些信息。对于我上面使用序列化对象的想法,您可以说在表中我将存储测验的名称、测验的得分,然后是一个名为测验数据的列,该列将存储包含信息的序列化对象关于问题。所以总的来说,该对象可能看起来像这样:
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?"
}
}
结构当然可能会有所不同,但通常我会存储整数来确定测验中字段的类型,然后存储一个字段来保存该字段的标签以及该字段的选项(如果有)。
最佳答案
在这种情况下,我建议查看 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)。
关于php - 未确定数据的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739746/