1

質問票に(匿名ではなく)記入する人がいる状況でデータベースを設定する方法に苦労しています。人と質問票の関係は多対多です。1人が複数の質問票に記入し、質問票は複数の人が記入します。したがって、PERSONテーブル、QUESTIONNAIREテーブル、および結合テーブル(PERSON-QUESTIONNAIRE)があります。

しかし、アンケート自体に表示される情報はどこに置くのですか?アンケート項目には2つの部分(2つのフィールド)があり、1つは人々が回答する質問またはステートメント(ITEM)で、もう1つは回答のためのスペース(RESPONSE)です。これらすべてが別のテーブルにあると仮定すると、このテーブルは何と結合しますか?(QUESTIONNAIREテーブル... QUESTIONNAIREには複数のQUESTIONNAIRE-ITEMを含めることができますか?)

そして、その最後の点について正しければ、選択した質問票と選択した人のITEMフィールドとRESPONSEフィールドを表示するDBグリッド(Delphiで)を設定する方法を一生理解することはできません。(db対応コンポーネントを使用してマスター/詳細関係をコーディングする方法を知っていますが、これは2つのマスターを使用した詳細のようなものです。)

4

2 に答える 2

7

1つの質問に対して複数の回答があり、複数の人からの回答があるため、QUESTIONNAIRE-ITEMS(質問)テーブルと別のテーブルQUESTIONNAIRE-RESPONSES(回答)があります。前者はQUESTIONNAIREへの外部キーを取得し、後者はQUESTIONNAIRE-ITEMSとPERSONの両方への外部キーを取得します。

実際、PERSON-QUESTIONNAIREテーブルは、他のテーブルから情報を照会できるため、省略できます。だから私が提案するデザインのために:

  • 調査:ID(PK)、説明など...
  • ユーザー:ID(PK)、名前など...
  • 質問:ID(PK)、SurveyID(FK)、質問など...
  • 回答:ID(PK)、QuestionID(FK)、UserID(FK)、Answerなど...

DBGridのビューは、次のようなクエリに基づいています。

SELECT 
  Question, 
  Answer,
  ...
FROM 
  Questions INNER JOIN Answers ON Questions.ID = Answers.QuestionID
WHERE
  Questions.SurveyID = :SurveyID AND Answers.UserID = :UserID

SurveyIDGUIの別の部分で、およびパラメーターを選択しUserIDます。

そしてボーナスとして:個別の結合テーブルの代わりとして、調査とユーザーを取得するためのクエリは次のようになります。

SELECT
  Surveys.ID,
  Users.ID
FROM
  Users INNER JOIN (
    Answers INNER JOIN (
      Questions INNER JOIN (
        Surveys
      ) ON Questions.SurveyID = Surveys.ID
    ) ON Answers.QuestionID = Questions.ID
  ) ON Users.ID = Answers.UserID
GROUP BY
  Surveys.ID,
  Users.ID
于 2012-06-28T19:52:51.933 に答える
3

ITEMとRESPONSEは異なるテーブルである必要があります。それらの間には1対多の関係があります。(項目はアンケートに属しますが、多くの人がその項目に回答できるため、各項目には多くの回答があります。)

次のような設定をお勧めします。

PERSON  <---- PERSON_QUESTIONNAIRE ----> QUESTIONNAIRE
                        ^                       ^
                        |                       |
                        |                       |
                     RESPONSE      ----->     ITEM

DBグリッド(Delphiの第一人者ではない)を設定する方法についての提案はありませんが、設計上の問題を解決することで、技術的な解決策がより明確になる場合があります。

于 2012-06-28T19:54:31.407 に答える