我正在构建一个调查构建系统,但不确定如何最好地存储数据。我可以看到我有两个选择:
- 使用序列化数组,或
- 将每个元素作为单独的行存储在相关表中
例如,通过使用第一个,我会将以下内容存储为序列化数组:
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 元素,然后以表格形式提交成品($_POST
数组是我的示例上面给出)。