ホームページ >データベース >mysql チュートリアル >データベース設計で 1 対 1、1 対多、および多対多の関係を実装するにはどうすればよいですか?

データベース設計で 1 対 1、1 対多、および多対多の関係を実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-21 06:31:09741ブラウズ

How Do I Implement One-to-One, One-to-Many, and Many-to-Many Relationships in Database Design?

データベース設計における関係: 1 対 1、1 対多、多対多

データベース テーブルを設計するときは、データの整合性を確保するためにデータ エンティティ間の関係を確立する必要があります。 1 対 1、1 対多、多対多の 3 つの一般的な関係タイプと、それらの実装方法を見てみましょう。

一対一の関係

1 対 1 の関係では、一方のテーブルの各行には、もう一方のテーブルにも対応する一意の行があります。これを実現するには、子テーブルの外部キー列を使用して、親テーブルの主キー列を参照します。例:

<code>学生表:学生ID,名字,姓氏,地址ID
地址表:地址ID,地址,城市,邮政编码,学生ID</code>

アドレス テーブルの外部キー (student_id) は、各アドレスを特定の学生にリンクします。

1 対多の関係

1 対多のリレーションシップでは、「1」側 (親テーブル) の各行が、「多」側 (子テーブル) に対応する複数の行を持つことができます。子テーブルの外部キー列を使用して、親テーブルの主キー列にリンクします。例:

<code>教师表:教师ID,名字,姓氏
课程表:课程ID,课程名称,教师ID</code>

各教師は複数のコースを持つことができますが、各コースは 1 人の教師にのみ属します。カリキュラム内の外部キー (Teacher_id) によって、この関係が確立されます。

多対多の関係

1 つのテーブルの各行が別のテーブルの複数の行に関連付けられる場合、またはその逆の場合、多対多の関係が存在します。これを実現するには、関連する 2 つのテーブル間の関係を保持する結合テーブルを作成します。例:

<code>学生表:学生ID,名字,姓氏
课程表:课程ID,名称,教师ID
学生课程表:课程ID,学生ID</code>

生徒のクラススケジュールでは、どの生徒が各クラスに所属するかを追跡し、その逆も同様です。

関連データのクエリ

これらの関係により、効率的なクエリが可能になります。例:

  • 特定のコースのすべての学生を取得: SELECT * FROM 学生スケジュール WHERE コース ID = X;
  • 特定の学生が登録したすべてのコースを取得: SELECT * FROM 学生コース スケジュール WHERE 学生 ID = Y;

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。