テーブルを設計する際に、1 対 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
。
1 対多: 関係の「多」側で外部キーを使用して、「1」側にリンクします。
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