0

私は現在、データベース テーブルとそれに付随する vb フォームを設計しています。フォームは、事前定義された約 40 の「はい/いいえ」の質問をすべてのユーザーに尋ねます。回答を適切に保存するようにデータベース テーブルを設計するにはどうすればよいですか。テーブルに 40 ほどの属性を含めることは避けたいと思います。特定のユーザーの回答を照会すると、質問とそのすぐ隣にそのユーザーの回答 (はい/いいえ) が表示されるように設計する方法はありますか?

4

3 に答える 3

1

最も簡単に言えば、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)を回答テーブルに

そうすれば、回答テーブルからすべての情報をいつでも取得でき、どの回答がどの質問とどのユーザーに属しているかなどを知ることができます。

彼の説明に合わせて用語が必要な場合は、用語を知らなかった場合に備えて、簡略化のためにすべての用語を除外しようとしました.

于 2013-07-08T15:08:10.980 に答える
1

これは私がそれを行う方法です。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'
于 2013-07-07T21:10:56.823 に答える
0

質問と回答を別のテーブルに保存できます。具体的にQuestionsは、40 のはい/いいえの質問を含むテーブルが作成されます。Answersテーブルには、質問識別子、ユーザー識別子、および回答の列があります (はい/いいえの質問の場合は、ブール値を使用できます) 。AnswerChoices別のテーブルにすることもできます。

ニーズに応じて柔軟に対応できます。同じユーザーが複数回アンケートに回答できる場合は、代わりにユーザーアンケートの表を用意して、それに回答をリンクすることができます。複数の調査が必要な場合は、調査と質問のマッピング テーブルを使用することもできます。

于 2013-07-06T20:37:43.153 に答える