1

これが一対多の関係であることを確認したいだけです。

ユーザーがチェックボックスリストで複数の問題を選択できるチェックボックスリストを持つ調査があります。だから私は3つのテーブルをセットアップしました

SurveyResults             SurveyProblems                 ProblemTypes                   
-------------             --------------                 -------------
SurveyResultID            SurveyProblemsID               ProblemTypeID
                          SurveyResultID                 ProblemName
                          ProblemTypeID

調査に複数の問題タイプがある場合、これはデータベース テーブルを作成する正しい方法ですか? これは 1 対多の関係ですよね?

4

3 に答える 3

2

技術的には、これは多対多関係です。これは、この構造の下では、一意性を強制するキーを定義しない限りProblemTypeID、単一を複数に関連付けることができるためです。SurveyResultID SurveyProblems.ProblemTypeID

しかし、私があなたの構造を理解している限り、これは正しく機能します。

多対多の例:

次のサンプルでは、​​ には 2 つの可能な値がSurveyResultIDあり、両方ProblemTypeIDで1,3 が使用されているため、多対多になっています。 SurveyResultID

SurveyProblemsID SurveyResultID ProblemTypeID
1                1              1
2                1              2
3                1              3
4                2              1
5                2              3

代理キーは厳密には必要ないことに注意してください。それらの間に複合主キーを定義することによってSurveyProblemsID一意性を強制する必要があることを考慮してください。SurveyResultID, ProblemTypeID

PRIMARY KEY (SurveyResultID, ProblemTypeID)

真の1 対多の構造では、調査を問題にリンクするための中間テーブルは必要ありません。代わりに、外部キーをテーブルに直接リンクできSurveyResultIDますProblemType

一対多構造:

SurveyResults           ProblemType
---------------------------------------------------
SurveyResultID          ProblemTypeID
                        ProblemName
                        SurveyResultID (foreign key)

定義した多対多の代わりに1対多をインデントしたとしても、将来多対多に拡張する必要が生じた場合、現在の構造はより柔軟であることが証明される可能性があります...ただし、追加の結合に対してクエリを実行するのは少し複雑です。

于 2012-08-30T20:43:43.350 に答える
0

正しいと思いますが、なぜ SurveyProblemsID が必要なのですか? 問題の種類が繰り返されないように、SurveyResultID と ProblemTypeID を複合主キーとして使用します。

SurveyResults             SurveyProblems                 ProblemTypes                   
-------------             --------------                 -------------
SurveyResultID PK         SurveyResultID PK, FK          ProblemTypeID  PK
                          ProblemTypeID  PK, KK          ProblemName

そして、これは実際には多対多です。

于 2012-08-30T21:12:48.750 に答える
0

調査テーブルを作成してから、問題のルックアップ テーブルを作成し、3 つ目のテーブルを作成して問題を調査テーブルに関連付けます。

于 2012-08-30T20:43:00.890 に答える