1

私は調査構築システムを構築していますが、データを保存するための最善の方法がわかりません。私が見ることができる2つの選択肢は次のとおりです。

  1. シリアル化されたアレイを使用するには、または
  2. 各要素を関連するテーブルに個別の行として格納するには

たとえば、最初のものを使用すると、次のようなものをシリアル化された配列として格納します。

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
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)

私がこれに見る利点は次のとおりです。

  1. 一元化されており、
  2. 次のような単純なクエリを使用して、スクリプト内で簡単に編集できます。

    UPDATE surveys SET data = '$serialized_array'
    

私がこれに見る主な欠点は次のとおりです。

  1. スクリプトの外部で編集することは困難です(たとえば、Navicatを使用する場合など)

また、データをシリアル化された配列として格納することは悪い習慣だと聞きました。私はこれが完全に文脈に依存していると思いますが(または私がこれを聞いた人は誰でも間違っています)。

2番目(関連するテーブルの個別の行として各要素を格納する)を使用すると、次のようなデータベース構造になります。

調査

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

私がこれに見る利点は次のとおりです。

  1. コンテンツのより良い分離があり、
  2. スクリプトの外部で編集する方が簡単です(たとえば、Navicatを使用する場合など)

私がこれに見る主な欠点は次のとおりです。

  1. スクリプト内で編集するのはより困難です(再順序付けされた要素または再構造化された回答を処理するための複雑なロジックを持つ多くのクエリ)

あなたへの私の質問はこれです:これらの2つの方法のどちらが(実際にどちらかであるとしても)手元のタスクにより適していますか?データをシリアル化された配列として格納することを好むのは、構築がはるかに簡単で、制御が簡単に思えるからです。関連するテーブルにデータを別々の行として格納することで...エレガンス...を見ることができますが。

関連性がある場合は、JavaScriptを使用して調査を作成する時点で、(具体的には)jQueryを使用してHTML要素を追加、削除、並べ替えてから、完成品をフォームで送信します($_POST配列は例Iです)。上記で与えた)。

4

5 に答える 5

3

データを正規化された形式で保存することが、おそらくここでの方法です。ユーザーから回答を収集するのは、通常、結果を分析するためです。

正規化された形式で保存することにより、たとえば、男性/女性の回答者の割合を簡単に確認できます。

SELECT text, COUNT(*) AS count
FROM answers
WHERE question_id = 1
GROUP BY text
于 2012-04-22T11:23:38.077 に答える
1

私が自問する質問は次のとおりです。

私が今考えている以外に、そのデータを別の用途で使用することはありますか? すでに指摘したように、統計目的でデータを使用できます。

または: 他の誰かが?!

ある種の「データの行き止まり」を構築している場合にのみ、シリアル化されたストレージを使用します。つまり、データが再び編集されることはめったにない/決してないことがわかっています。

または、データが常に全体としてアクセスされ、エントリの一部へのアクセスがほとんど使用されないことがわかっている場合は、シリアル化されたストレージを使用します。

私の2セント。

于 2012-04-22T11:40:03.463 に答える
0

オプション 1 はより適応性が高く、オプション 2 はより効率的であると言えます。したがって、選択は効率と適応性のどちらかになります。シリアル化された文字列を解析する追加の手順ではなく、変数を渡すデータベースによって効率が達成されます。適応性。たとえば、データベースを実際に変更しなくても、調査ごとにデータ構造が異なる可能性があるためです。また、データ型を定義する必要はありません。

于 2012-04-22T11:25:31.380 に答える
0

データベースに格納する方が、シリアル化された形式で格納するよりも優れています。また、スクリプトの外部で簡単に読み取って編集できる構成ファイル (json、yaml、ini 形式) にデータを保存することを検討してください。これらの形式を PHP で読み書きするための簡単な方法があります。

于 2012-04-22T11:29:23.457 に答える
-1

私の意見では、データを保存する最も快適な方法は、次の理由からデータベースに保存することです。

  1. クロスプラットフォーム形式;
  2. SQL はよく知られている標準です。
  3. PHP + SQL は非常に優れた組み合わせです。
  4. SQL データベースには統計があります。
  5. 文学などの形での良いサポート...
于 2012-04-22T11:51:06.437 に答える