1. ホーム
  2. sql

[解決済み] テーブルを設計する際に、1対1、1対多、多対多の関係をどのように実装するか?

2022-03-14 20:17:53

質問

テーブルを設計する際に、1対1、1対多、多対多の関係をどのように実装するか、いくつかの例を挙げて説明してください。

どのように解決するのですか?

1対1です。 参照されるテーブルの外部キーを使用する。

student: student_id, first_name, last_name, address_id
address: address_id, address, city, zipcode, student_id # you can have a
                                                        # "link back" if you need

また、外部キー・カラムに一意制約をかける必要があります ( addess.student_id ) に複数行が存在しないように、子テーブル ( address ) の同じ行に関連付けることができます。 student ).

一対多 : リレーションシップの多くの側で外部キーを使用して、"one" 側へリンクします。

teachers: teacher_id, first_name, last_name # the "one" side
classes:  class_id, class_name, teacher_id  # the "many" side

多対多 : ジャンクションテーブルを使用する ( ):

student: student_id, first_name, last_name
classes: class_id, name, teacher_id
student_classes: class_id, student_id     # the junction table

クエリーの例

 -- Getting all students for a class:

    SELECT s.student_id, last_name
      FROM student_classes sc 
INNER JOIN students s ON s.student_id = sc.student_id
     WHERE sc.class_id = X

 -- Getting all classes for a student: 

    SELECT c.class_id, name
      FROM student_classes sc 
INNER JOIN classes c ON c.class_id = sc.class_id
     WHERE sc.student_id = Y