php - 未确定数据的数据库设计

标签 php mysql postgresql

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

相关文章:

php - 如何使用 php/mysql 取消设置 BLOB?

javascript - AJAX文件夹路径问题

mysql - 需要帮助 DATE_FORMAT( p.date, '%Y-%m-%d' ) = CURDATE( )

java - 我应该将哪个 JDBC jar 与 java 1.5.0_16 和 PostgreSQL 8.3.5 一起使用?

postgresql - 如何更改 Elastic Beanstalk 的 RDS 实例

php - 使用 cURL 的 Bug 订阅 instagram API

mysql - 如何在 plt-scheme 中通过 ffi 访问 char **?

c# - 使用 Entity Framework 添加详细信息行

postgresql - 如何在Postgresql中对复杂的嵌套JSONB实现全文搜索

javascript - PHP 和 JavaScript : Dynamic search with 2 textbox