4

わかりましたので、できるだけ具体的にしようと思いますが、MySQL のスキルはかなり弱いです。だからここに状況があります:

ドナーと学生の2つのテーブルがあります。寄付者は必要な数の学生にリンクでき、各学生は寄付者が「要求」したい数の寄付者にリンクできます。したがって、学生のサリーがいる場合、彼女はドナーのジムとドナーのジェフを彼女にリンクさせることができます。そのため、すべての生徒を 1 つのテーブルに配置し、すべての寄付者を別のテーブルに配置します。それらをまとめて、学生の名前、ID、および学生がリンクされているすべての寄付者の ID を表示する必要があります。

現在、私のテーブルは次のとおりです。DonorID、FirstName、LastName、DonorType、StreetAddress などのドナー。次に、StudentID、FirstName、LastName、および DonorID を持つ学生。ただし、それでは学生を 1 人の寄付者に関連付けることしかできません。そのため、StudentID、FirstName(学生の)、LastName(学生の)、およびその学生を「主張」する DonorID を表示し、StudentID を複製できるようにする遷移テーブルを作成する必要があると考えていました。同じ学生の 2 番目、3 番目、4 番目などのエントリに別の DonorID を入力します。

ですから、私の質問は、MySQL で遷移テーブルがどのように機能するかということだと思います。JOIN 関数を使用して 2 つのテーブルを結合する必要があると思いますが、tizag.com でそれについて読んだ後、さらに混乱しました。私は Access を使用しており、遷移テーブルを作成するときに各テーブルから PK を取得し、他のテーブルの 2 つのキーを使用して複合キーを作成できますが、MySQL でそれを行う方法がよくわかりません。それは本質的に同じように機能し、各テーブルから PK を取得し、それらを 3 番目のトランジション テーブルでリンクする必要がありますか?

4

2 に答える 2

2

マーヴィンの権利。

これをやってのけるには、3 つのテーブルが必要です。

ドナー

DonorID
FirstName
LastName
DonorType
StreetAddress
etc. 

学生

 StudentID
 FirstName
 LastName
 etc.

次に、Student_Donor が必要です。これはしばしば結合テーブルと呼ばれ、多対多の関係を実装します。

StudentID   (PK)  (FK to Student)
DonorID     (PK)  (FK to Donor)
DonorOrdinal

StudentID = 5 に ID = 6、7、11、15 の 4 人の寄付者がいる場合、これらの行があります。

StudentId   DonorId   DonorOrdinal
    5         6          1
    5         7          2
    5        11          3
    5        15          4

DonorOrdinal 列では、学生のプライマリ ドナーとセカンダリ ドナーを指定できます。あなたの質問からはそれがどれほど重要かはわかりませんが、これらのことを注文できることは役に立ちます。これを覚えておいてください: 正式には、SQL SELECT クエリは、ORDER BY も指定しない限り、予測できない順序で行を返します。

生徒とその寄付者を表示する場合は、次のクエリが必要です。

      SELECT s.StudentID, s.FirstName, s.LastName, 
             sd.DonorOrdinal, 
             d.DonorType, d.DonorID, d.FirstName, d.LastName
        FROM student s
   LEFT JOIN student_donor sd ON s.StudentID = sd.StudentID
   LEFT JOIN donor d ON sd.DonorID = d.DonorID
    ORDER BY s.StudentID, sd.DonorOrdinal, d.DonorID

これにより、ID の順にすべての学生 (寄付者の有無にかかわらず) が表示され、次に DonorOrdinal の順に寄付者が表示されます。

于 2012-11-21T02:37:33.373 に答える
0

はい、かなり。あなたが話しているのは、多対多の関係です。ドナー テーブルには、学生テーブルへの参照を含めないでください (逆も同様です)。DonorId と StudentId を含む新しいテーブル (遷移テーブルと呼んでいるもの) が必要になります。これは主キーを構成することも、auto_increment である主キーに別の列を使用することもできます。

于 2012-11-21T00:42:39.067 に答える