我正在建立一个调查建设系统,我不确定如何最好地存储数据。我能看到的两个选择是:
例如,通过使用第一个,我会将类似下面的内容存储为序列化数组:
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'
我看到的主要缺点是:
我也听说将数据存储为序列化数组是不好的做法。虽然我猜这完全取决于上下文(或者我听到这个错误的人)。
通过使用第二个(将每个元素作为相关表中的单独行存储),我将拥有这样的数据库结构:
调查
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
我看到的好处是:
我看到的主要缺点是:
我的问题是:这两种方法中的哪一种(如果确实如此)更适合手头的任务?我很想将数据存储为序列化数组,因为它看起来更容易构建并且更容易控制。虽然我可以看到...... 优雅 ...将数据存储为相关表格中的单独行。
如果它有任何相关性,目前调查是使用JavaScript构建的:使用(特定)jQuery添加,删除和重新排序HTML元素,然后以表格形式提交成品(使用{{ 1}}数组就是我上面给出的例子。
答案 0 :(得分:3)
以规范化形式存储数据可能就是这里的方法。当您从用户那里收集答案时,通常是因为您想对结果进行一些分析。
通过以标准化形式存储,可以很容易地看到男性/女性的响应者百分比。
SELECT text, COUNT(*) AS count
FROM answers
WHERE question_id = 1
GROUP BY text
答案 1 :(得分:1)
我会问自己的问题是:
我现在能否再次使用这些数据而不是我现在想到的数据?正如已经指出的那样您可以将数据用于统计目的。
或者:还有其他人吗?!
我只会在我正在构建某种“数据死胡同”的情况下使用序列化存储,即我知道很少/永远不会再次编辑数据。
或者,如果我知道数据将始终作为一个整体访问,并且访问部分条目的用途很少,我会进行序列化存储。
我的2美分。答案 2 :(得分:0)
我认为选项1更具适应性,选项2更有效,因此选择在效率和适应性之间。通过数据库传递变量来实现效率,而不是解析序列化字符串的额外步骤。适应性,因为不同的调查数据结构可能不同,例如,没有实际修改数据库。此外,不需要定义数据类型。
答案 3 :(得分:0)
在数据库中存储比以序列化形式存储更好。另外,考虑将数据存储在配置文件中,这些文件可以在脚本之外轻松读取和编辑(json,yaml,ini格式)。有一些简单的方法可以在PHP中读取和编写这些格式。
答案 4 :(得分:-1)
在我看来,最舒适的存储数据方式是在数据库中,原因如下: