0

テスト付きのWebサイトを作成したい。テストにはさまざまな質問が含まれています。テキストボックス、チェックボックス、またはラジオボタンの場合があります。dbの質問、回答、およびユーザーに保存したいと思います。

これがテーブル構造についての私の考えです。

Users
{
   Id
   Name
}
Questions
{
   Id
   Description
   Type // textbox, checkbox, etc
}
Answers
{ 
    Id
    UserId
    QuestionId
    AnswerValue
}

しかし、どうすればさまざまな回答に関する情報を保存できますか?AnswerValueには、「Carrot」(テキストボックス)、「1011」(チェックボックス)、「3」(ラジオボタン)などのように書くことができます。残念ながら、これは良い解決策ではないと思います。私の場合、DB構造を設計する最良の方法は何ですか?

4

5 に答える 5

1

string / varchar(バイナリデータのbase64エンコーディングを使用)を使用するのが最も簡単なソリューションであることがわかり、本番環境ですべてのバリエーションを試しました。特に、データ型ごとに1つずつ、複数の列を作成するのは嫌いです。これは、A$$を扱う上での本当の苦痛です。

于 2011-03-30T20:22:55.907 に答える
1

回答の種類ごとに個別の値を使用して、Answers テーブルをもう少し拡張することもできます。 TextAnswer RadioAnswer (選択したラジオ ボタンのインデックスになります)

このアプローチの問題は、特定の質問に対する別のタイプの値を許可するために、それぞれがnull可能でなければならないことです...データベースに強制させたい場合、データの整合性が少し複雑になります。

于 2011-03-30T19:18:00.340 に答える
1

あなたの構造は、1 つの質問に対するユーザーの複数の回答を保存するのに問題ありません。ただし、datetime フィールドを追加して、特定の回答がいつ提供されたかがわかるようにすることもできます(同じ質問に対する他の回答との関連で)。

于 2011-03-30T19:27:59.230 に答える
1

設計は悪くないのかもしれません...
Answer の QuestionId を知っているので、それがどのタイプの質問であったかを調べることができます。

例えば:

SELECT 
   Q.Type, A.* FROM Question Q, Answer A
WHERE
   Q.Id = A.QuestionId

次に、コードで回答を表示するときに、回答の値とそのタイプの両方を取得するため、コードは Q.Type に基づいて処理できます。

複数の値 (チェックボックスまたはラジオボタン) を持つ質問への回答を保存する方法の問題に対処するには、1 対多の関係を持つ別のテーブルにそれらを保存することを検討する必要があります。

たとえば、チェックボックスの 質問には多くの項目 (チェック可能なもの) を含めることができ、チェックボックスの回答には多くの項目 (チェックされた項目) を含めることができます。現在のスキーマでは、各アイテムの説明を保存する方法がないようです。そこで、新しいテーブル Items と Answers_Items を提案します

Items{
    ItemId
    QuestionId   
    Description
}

Answers_Items{
    ItemId
    AnswerId
    AnswerValue
}
于 2011-03-30T19:01:13.403 に答える
1

これはかなり大きな質問なので、その核心となるものを私が解釈してお答えしようと思います。回答の種類に基づいて、表示するコントロールの種類を決定する方法を探しているようです。これに関して、私が使用して成功したパターンが 2 つあります。1 つは、一般に .Net 型にマップできる AnswerType を格納することです。次に、そのタイプに基づいて、表示するコントロールの種類を決定します (つまり、string -> TextBox、bool -> radiobutton、multiselect/array -> チェックボックス リストなど)。もう1つは、メタデータの保存です(上記のように)。

あなたの場合、前者のソリューションを検討します。これは、一般的に実装が「簡単」であり、メタデータに関する事前知識とプログラミングが少なくて済むためです。一連の回答タイプの例としては、文字列、はい/いいえ、数値、リストなどがあります。ご覧のとおり、これらの一般的な型は、かなり簡単に .Net 型にマップされます。"List" の場合、ルックアップ (または AllowedValues) 用に追加のテーブルを追加することができます。

これがあなたが探しているものであることを願っています。それ以外の場合は、同様のオープン ソース システムを検討することをお勧めします。 この検索は良いスタートになるかもしれません。

于 2011-03-30T19:05:02.467 に答える