Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 1対多および多対多リレーションシップ | セクション
データベース設計パターン

book1対多および多対多リレーションシップ

メニューを表示するにはスワイプしてください

リレーショナルデータベース設計において、テーブル間のリレーションシップをどのように表現するかを理解することは重要です。最も一般的なリレーションシップの種類には、1対多多対多 があります。それぞれの種類は、あるテーブルのレコードが別のテーブルのレコードとどのように関連するかを示しており、SQLでのモデリング方法がデータのクエリや保守に直接影響します。

1対多リレーションシップ とは、1つのテーブルの単一レコードが、別のテーブルの複数のレコードと関連できる一方で、2つ目のテーブルの各レコードは1つ目のテーブルの1つのレコードのみに関連することを意味します。例えば、coursesenrollments のシナリオを考えてみましょう。各コースは複数の受講登録を持つことができますが、各受講登録は正確に1つのコースに対応します。

-- Example: One-to-many relationship between courses and enrollments
CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100)
);

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    course_id INT,
    student_id INT,
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- Here, each course can have many enrollments, but each enrollment refers to one course.

多対多リレーションシップ を表現する必要がある場合は、少し複雑になります。この場合、1つのテーブルのレコードが別のテーブルの複数のレコードと関連し、逆もまた同様です。例えば、学生は複数のコースを受講でき、各コースには多くの学生が登録できます。リレーショナルデータベースでは、2つのテーブル間で直接的な多対多リレーションシップをサポートしていません。そのため、このパターンは 中間テーブル(アソシエーションテーブルやリンクテーブルとも呼ばれます)を使ってモデリングします。中間テーブルは、両方の関連テーブルの主キーを参照する外部キーを保持し、多対多リレーションシップを2つの1対多リレーションシップに分割します。

-- Modeling a many-to-many relationship between students and courses using enrollments as a junction table
CREATE TABLE students (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(50)
);

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100)
);

CREATE TABLE enrollments (
    enrollment_id INT PRIMARY KEY,
    student_id INT,
    course_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- The enrollments table links students and courses, allowing each student to enroll in multiple courses and each course to have multiple students.

1. どのリレーションシップタイプが中間(アソシエーション)テーブルを必要としますか?

2. 1対多リレーションシップは通常SQLでどのように表現されますか?

3. 多対多リレーションシップにおけるジャンクションテーブルの目的は何ですか?

question mark

どのリレーションシップタイプが中間(アソシエーション)テーブルを必要としますか?

正しい答えを選んでください

question mark

1対多リレーションシップは通常SQLでどのように表現されますか?

正しい答えを選んでください

question mark

多対多リレーションシップにおけるジャンクションテーブルの目的は何ですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  4

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  4
some-alt