具有未确定数据的数据库设计

时间:2014-03-30 02:59:41

标签: php mysql postgresql

最近,我一直在计划一个允许用户自定义和添加到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>

1 个答案:

答案 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)。