ホームページ > データベース > mysql チュートリアル > 1 対 1、1 対多、および多対多のデー​​タベース関係はどのように機能しますか?

1 対 1、1 対多、および多対多のデー​​タベース関係はどのように機能しますか?

Susan Sarandon
リリース: 2025-01-21 06:27:11
オリジナル
402 人が閲覧しました

How Do One-to-One, One-to-Many, and Many-to-Many Database Relationships Work?

効率的なデータ管理のためのデータベース関係のマスター

効果的なデータベース設計は、テーブルを適切に構造化し、テーブル間の関係を定義するかどうかにかかっています。 レコードの接続方法は、1 対 1、1 対多、多対多の 3 つの基本的な関係タイプによって決まります。 それぞれのタイプとその実装を見てみましょう。

1 対 1 の関係

1 対 1 の関係は、2 つのテーブル内のレコード間の 1 対 1 の対応関係を意味します。 これは、親テーブルの主キーを参照する依存テーブルの外部キーを使用して実現されます。

例:

<code class="language-sql">-- Table 1: Student
CREATE TABLE Student (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(255),
    last_name VARCHAR(255),
    address_id INT
);

-- Table 2: Address
CREATE TABLE Address (
    address_id INT PRIMARY KEY,
    address VARCHAR(255),
    city VARCHAR(255),
    zipcode VARCHAR(10),
    student_id INT UNIQUE
);</code>
ログイン後にコピー

student_idaddress_id に一意にマッピングされ、1 対 1 のリンクを示します。 UNIQUE テーブルの student_id に対する Address 制約に注目してください。

1 対多の関係

1 対多の関係では、1 つのテーブル内の 1 つのレコードが別のテーブルの複数のレコードに関連付けられます。 依存テーブルは、親テーブルの主キーを参照する外部キーを使用します。

例:

<code class="language-sql">-- Table 1: Teacher
CREATE TABLE Teacher (
    teacher_id INT PRIMARY KEY,
    first_name VARCHAR(255),
    last_name VARCHAR(255)
);

-- Table 2: Class
CREATE TABLE Class (
    class_id INT PRIMARY KEY,
    class_name VARCHAR(255),
    teacher_id INT
);</code>
ログイン後にコピー

1 人の教師が複数のクラスを教えることができますが、各クラスの教師は 1 人だけです。

多対多の関係

多対多の関係は、1 つのテーブルの複数のレコードを別のテーブルの複数のレコードに接続します。これには、両方のテーブルの外部キーを含むジャンクション テーブルが必要です。

例:

<code class="language-sql">-- Table 1: Student
CREATE TABLE Student (
    student_id INT PRIMARY KEY,
    first_name VARCHAR(255),
    last_name VARCHAR(255)
);

-- Table 2: Class
CREATE TABLE Class (
    class_id INT PRIMARY KEY,
    name VARCHAR(255)
);

-- Junction Table: Student_Class
CREATE TABLE Student_Class (
    class_id INT,
    student_id INT,
    PRIMARY KEY (class_id, student_id)
);</code>
ログイン後にコピー

Student_Class テーブルでは、複数のクラスに複数の生徒が参加できます。

データの整合性: 1 対 1 および 1 対多の関係で外部キーに UNIQUE 制約を適用することは、データの整合性を維持するために重要です。

クエリの例:

<code class="language-sql">-- Students in a specific class:
SELECT s.student_id, s.last_name
FROM Student_Class sc
JOIN Student s ON s.student_id = sc.student_id
WHERE sc.class_id = 1;

-- Classes attended by a specific student:
SELECT c.class_id, c.name
FROM Student_Class sc
JOIN Class c ON c.class_id = sc.class_id
WHERE sc.student_id = 2;</code>
ログイン後にコピー

以上が1 対 1、1 対多、および多対多のデー​​タベース関係はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート