0

まず、この質問はどの言語にも関係があると思いますが、使用しているものを指定しました。

私も退屈し始めたらすみませんが、動的な調査管理システムを構築するための最良の方法を見つけようとしています. 私のクライアントは基本的に、レポートを作成する SAS 用の MS SQL コネクタしか持っていないため、データは MS SQL に保存する必要があると私に言いました。

これまでの私の論理は次のとおりです。調査自体を設定します。つまり、タイトル、簡単な概要などを尋ねます。質問を定義します。3番目。調査を公開します。

これまでに行ったことは、彼らが「調査を公開する」ときに、回答を格納するこの調査専用のデータベース テーブルを作成したことです。これの管理者側からは、質問、おそらく質問のタイトルを変更することはできませんが、それはそれについてです. 質問を追加/削除することはできません。

質問は、個々のデータベース テーブルを作成することは良いことですか? 私の唯一の心配は、管理者が 30 の質問を作成すると、その専用テーブルに 30 列が作成されることです。それに伴い、この方法は、SAS システムがレポート用のデータを簡単に取り込むことができる場合があります。管理者は、管理パネルで調査の回答を確認できません。

4

5 に答える 5

3

私は言語の採点試験で似たようなことをしました。次の表を使用して、より柔軟なアプローチを選択しました

+------+    +-------------+    +-------------+    +-------------+    +----------+
| Exam |    | Question    |    | Choice      |    | Answer      |    | User     |
+------+    +-------------+    +-------------+    +-------------+    +----------+
| id   |    | id          |    | id          |    | id          |    | id       |
| name |    | questionNb  |    | choice      |    | user_id     |    | name     |
+------+    | question    |    | question_id |    | exam_id     |    | email    |
            | exam_id     |    | isAnswer    |    | question_id |    | password |
            +-------------+    +-------------+    | choice_id   |    +----------+
                                                  | isGood      | 
                                                  +-------------+ 

このモデルにより、15 問の試験、30 問の試験、50 問の試験を簡単に受けることができました。このモデルを調査に適応させるには、isAnswer と isGood の部分を削除するだけでよく、ユーザー データを年齢、収入、性別などの匿名の一般データに置き換える必要があります。

于 2011-01-20T15:02:32.083 に答える
2

質問ごとに列を作成することは完全に間違っています。ビジネス指向の目的で実行時にデータベースを変更することは「絶対にしない」ことです。「リレーショナルデータベース」について何か読んでください。次のようになります。

table_surveys id 調査名

table_questions id fk_survey (table_surveys への外部キー) question_text (質問の値? おそらく)

table_questions_options id question_id(table_questions への外部キー) option_value (これは、テストの場合は true/false、調査の場合は数値になります) option_label

table_users id ユーザー名 パス名

table_answers id options_fk (table_question_options への外部キー) users_fk (table_users への外部キー)

このようにして、すべてがリンクされます (オプション、質問、または別のアンケートへの項目を再利用する必要はありません)。

于 2011-01-20T15:43:13.453 に答える
0

Kibbeeに敬意を表して、PHP/MSSQLのサポートは実際には非常に優れています。私たちはそれをかなり頻繁に行い、パフォーマンスはPHP / MySQLを最高にし、コンパイルされたC#/ MSSQLと一致します(非常に限定された非科学的なテストで)。これは、WinマシンでPHPを実行していることを前提としています。別のMSSQLボックスへのTLSコネクタを使用してPHPを実行することは、もう1つの難題であり、構成するのが面倒な場合があります。

とにかく、同様のシナリオがあり、フォームを管理するための1つのテーブル(プライマリとしてFormIDを使用するフォーム)、フィールド/質問を管理するための別のテーブル(FieldIDを使用するフィールド、Y / NなどのFieldType、テキスト、選択など)を使用しました。 )、および別のフィールドをフォームに「割り当てる」(FormFields w / FormFieldID、FormID、FieldID、選択したアイテムの配列内のパラメーターなど)。次に、質問の回答を処理するためのさらに別のテーブルのセット。

私はグループの他のメンバーに同意します。必ず正規化し、質問ごとに個別の列を作成しないでください。最初はもっと手間がかかりますが、クエリを書き直してテーブルを再設計する代わりに、テーブルにいくつかの行を追加するだけでよい場合に感謝します。

于 2011-05-27T16:05:51.860 に答える
0

ドキュメントのコメントによると、 PHP でのMS SQL サポートはせいぜい不安定です。プロジェクトで使用できる言語は PHP だけですか? そうでない場合は、C#、VB.Net、または SQL Server とより互換性のあるものの使用を検討することをお勧めします。それ以外の場合は、最初にデータを MySQL に保存し、分析が必要になったときに MS SQL Server にエクスポートすることができます。

于 2011-01-20T14:51:40.460 に答える
0

あなたの質問を本当に理解しているかどうかわかりません。しかし、私はかつてそのような調査システムを構築しました。そして、次の表については非常に迅速かつ簡単になりました(私の記憶が正しければ)。

USER, SURVEYS, QUESTIONS, ANSWERS, [some mapping tables]

SAS は仮想任意テーブルからデータをフェッチします。すべてを 1 つまたは 2 つの表にまとめれば、さらに簡単になります。

于 2011-01-20T14:52:45.173 に答える