私は現在、データベース テーブルとそれに付随する vb フォームを設計しています。フォームは、事前定義された約 40 の「はい/いいえ」の質問をすべてのユーザーに尋ねます。回答を適切に保存するようにデータベース テーブルを設計するにはどうすればよいですか。テーブルに 40 ほどの属性を含めることは避けたいと思います。特定のユーザーの回答を照会すると、質問とそのすぐ隣にそのユーザーの回答 (はい/いいえ) が表示されるように設計する方法はありますか?
3 に答える
最も簡単に言えば、UserID をフィールド 1 として開始する ("User") テーブルを作成します。すべての質問を含む Q テーブルを作成します (プログラムでこれらをハードコーディングしたくない場合のみ) 回答テーブルを作成します。テーブルには 2 つの列が必要です... UserID と Answer
必ずしもこれら 2 を外部キーにする必要はありませんが、長期的にはデータの削除に関してはより適切です (たとえば、削除されていない質問がまだユーザーにある場合など、ユーザーを削除できない理由がわかります)。 、これは、ユーザーが削除されるため、実際に保持する必要のないスペースを避けるためです)
次に、質問を一度に 1 つずつ送信するか、一度にすべて送信するときに、ユーザー ID を Answers テーブルに入力し、回答を入力するだけです。したがって、ユーザー 1 は常に 1 であり、答えは変わります。
私があなたなら、質問表も作成します。したがって、全体は次のようになります
ユーザーテーブル
UserID、UserName、UserPass、User...、User... など
質問表
質問ID、質問
回答表
ユーザーID,質問ID,回答
したがって、プログラムでは、どの質問がどの質問IDに対応するかを知っているので、挿入します
1(UserID),1(to40forQuestionID),answer.text(Answer)を回答テーブルに
そうすれば、回答テーブルからすべての情報をいつでも取得でき、どの回答がどの質問とどのユーザーに属しているかなどを知ることができます。
彼の説明に合わせて用語が必要な場合は、用語を知らなかった場合に備えて、簡略化のためにすべての用語を除外しようとしました.
これは私がそれを行う方法です。QUESTION テーブルにすべての質問をリストします。これはまた、新しい行を追加するだけで、いつでも新しい質問を追加できることを意味します.
ユーザー
ユーザー ID | ユーザー名 | メール | など..
質問
質問ID | 質問
USER_RESPONSE
ユーザー ID | 質問ID | 応答
SELECT
user.Name,
question.Qustion,
user_response.Responce
FROM
user
INNER JOIN user_response
ON user.UserId = user_response.UserId
INNER JOIN question
ON user_response.QuestionId = question.QuestionId
WHERE
user.UserName = 'JoeBloggs'
質問と回答を別のテーブルに保存できます。具体的にQuestions
は、40 のはい/いいえの質問を含むテーブルが作成されます。Answers
テーブルには、質問識別子、ユーザー識別子、および回答の列があります (はい/いいえの質問の場合は、ブール値を使用できます) 。AnswerChoices
別のテーブルにすることもできます。
ニーズに応じて柔軟に対応できます。同じユーザーが複数回アンケートに回答できる場合は、代わりにユーザーアンケートの表を用意して、それに回答をリンクすることができます。複数の調査が必要な場合は、調査と質問のマッピング テーブルを使用することもできます。