0

ユーザーが管理者セクション内で質問を選択できる調査アプリケーションを作成するための最適なソリューションを見つけようとしています。

質問をするフロント エンドの Web ページがあり、質問に答えると、回答をデータベースに保存します。「FinishedSurvey」テーブルの列が質問と一致する場合、これは素晴らしいことです。ただし、私が望むのは、ユーザーが質問を選択できるようにして、ログオン時に質問を表示し、送信時にそれらの回答が将来取得できるように質問と一緒に保存されるようにすることです。

この質問は、知らないうちにデータベースに保存されているものを変更することを人々に許可する必要があるアプリケーションに当てはまります。

私は過去にこのようなことをしたことがあります.20個のint列と20個のvarchar列に、構成ファイルが特定の顧客構成にマップする一般的な名前を付けました。varCharColumn1 が「What is your name?」にマップされているとします。ただし、これは面倒で、実際には拡張できず、ストレージを無駄にしています。

このアプリケーションには何千人ものユーザーがいて、それぞれがさまざまな入力方法とさまざまな形式の回答でさまざまな質問をします。回答が設定されたドロップダウン、カレンダー、10 文字のフリー テキスト、1000 文字のフリー テキスト、数字が必要な場合もあります。

おそらく簡単な答えやアプローチ、またはこれを行うのに慣れていないテクノロジーさえあるでしょうが、簡単な方法は思いつきません。

この特定のアプリケーションは、MsSQL データベースを使用する ASP.NET 4.0 Web サイトです。

4

1 に答える 1

3

列 [...] 質問に一致 [...] 20 個の int 列と 20 個の varchar 列 [...] しかし、これは面倒で、実際には拡張可能ではなく、ストレージを浪費しています。

あなたが正しい。データベースの正規化に関する本を手に取ってください。質問数が 100 のアンケートが必要な場合はどうすればよいでしょうか? 「できません」と言いますか、それとも 100 列を作成する更新プログラムを展開しますか?

私は次のようにすると思います: トップレベルにアンケートテーブルがあるとします:

ID | Description
-------------------------
 1 | 'Test questionnaire'

質問で構成されるテーブルを作成します。次に例を示します。

ID | QuestionnaireID | Question        | ( Other options like 'IsMandatory')
----------------------------------------------------------------------------
 1 |               1 | 'Test question' | 

次に Answers テーブルを作成します。

ID | QuestionID | Answer          | IsUserSpecified
---------------------------------------------------
 1 |          1 | 'Test answer 1' |               0 
 2 |          1 | 'Test answer 2' |               0
 3 |          1 | 'Other...'      |               1

次に、回答済みの質問を含む Response テーブルを作成します。

ID | UserID | AnswerID | AnswerValue
----------------------------------------------------------------------------
 1 |      1 |        1 | 
 1 |      2 |        3 | 'I was entered by the user'

これで完了です。「その他...」の回答のように、ユーザーが独自の値を入力できる場合と同様に、ユーザーに AnswerValue を入力させます。

残念ながら、これは与えられた答えの型を扱っていません。と思いますが、考えたりテストしたりする時間がありませんでした。回答テーブルと応答テーブルに型指定された列を追加できます ( VarCharValueDateTimeValueIntValue... など)。次に、回答に入力できる値のタイプを回答テーブルに登録し、適切な列に入力/読み取る必要があります。しかし、そのデザインはまだにおいがします。

于 2012-10-23T13:21:42.603 に答える