【发布时间】:2012-04-22 11:19:09
【问题描述】:
我正在构建一个调查构建系统,但不确定如何最好地存储数据。我可以看到我有两个选择:
- 使用序列化数组,或
- 将每个元素作为单独的行存储在相关表中
例如,通过使用第一个,我会将类似以下的内容存储为序列化数组:
Array
(
[name] => Survey
[sections] => Array
(
[0] => Array
(
[name] => Introduction
[pages] => Array
(
[0] => Array
(
[text] => Please answer the following questions.
[questions] => Array
(
[0] => Array
(
[text] => Are you male or female?
[answers] => Array
(
[0] => Male
[1] => Female
)
)
)
)
)
)
)
)
我认为这样做的好处是:
- 它是集中式的,并且
-
使用简单的查询在脚本中进行编辑很容易,例如:
UPDATE surveys SET data = '$serialized_array'
我看到的主要缺点是:
- 很难在脚本之外进行编辑(例如在使用 Navicat 时)
我还听说将数据存储为序列化数组是一种不好的做法。虽然我猜这完全取决于上下文(或者我从谁那里听到的都是错误的)。
通过使用第二个(将每个元素作为单独的行存储在相关表中),我将拥有这样的数据库结构:
调查
id name
1 Survey
部分
id name survey_id index
1 Introduction 1 0
页面
id text section_id index
1 Please answer these questions. 1 0
问题
id text page_id index
1 Are you male or female? 1 0
答案
id text question_id index
1 Male 1 0
2 Female 1 1
我认为这样做的好处是:
- 有更好的内容分离,并且
- 在脚本之外编辑更容易(例如在使用 Navicat 时)
我看到的主要缺点是:
- 在脚本内部进行编辑更加困难(许多具有复杂逻辑的查询来处理重新排序的元素或重新构建的答案)
我的问题是:这两种方法中的哪一种(如果确实有的话)更适合手头的任务?我倾向于将数据存储为序列化数组,因为它似乎更易于构建且更易于控制。虽然我可以看到 ... 优雅 ...将数据作为单独的行存储在相关表中。
如果有任何相关性,则在使用 JavaScript 构建调查时:使用(特别是)jQuery 添加、删除和重新排序 HTML 元素,然后以表格形式提交最终产品(使用 @987654328 @array 就是我上面给出的例子)。
【问题讨论】:
-
如果您愿意考虑使用不同的数据库,例如 MongoDB 等文档存储,这个问题可能没有实际意义。
-
这看起来很有趣。虽然,我构建这个调查系统并不是为了我自己使用,而是让任何人和每个人自己下载和实施,所以最好不要依赖不太常用的第三方软件
标签: php mysql serialization