1対1および多対多
メニューを表示するにはスワイプしてください
1対1
1対1リレーションシップは、あるテーブルの各レコードが別のテーブルの単一のレコードに対応する関係。1対多のように、1つのテーブルのレコードが別のテーブルの複数のレコードと関連するのとは異なり、1対1では各レコードのペアが一意に結び付けられる。このリレーションシップには、2つの主要な接続が含まれる:
- 1つ目のテーブルが、2つ目のテーブルの主キーを参照する外部キーを持つ;
- 逆に、2つ目のテーブルが、1つ目のテーブルの主キーを参照する外部キーを持つ。
注意
1対1リレーションシップは外部キーに依存する。この外部キーには「unique=True」パラメータを含める必要がある。
場合によっては、あるレコードが存在するためには別のレコードが必要だが、後者は単独で存在できる。このようなリンクは必須1対1と呼ばれる。
次の図を参照:
別の例:
必須1対1: すべてのPassportは特定のPersonに紐付けられている必要がある。ただし、Personはパスポートを持たずに存在することもできる(例:子供の場合)。
多対多
多対多リレーションシップは、2つのテーブル間で複数の対応するレコードを持つことができ、しばしば中間テーブルによって仲介される構造。 一方、多対一リレーションシップでは、1つのテーブルの1つのレコードが別のテーブルの複数のレコードに対応するが、多対多では両方のテーブルで複数のレコードが相互に関連付けられる。
この中間テーブルには3つのカラムが必要:id(各リレーションシップの識別子)、first_table_id、およびsecond_table_id。first_table_idとsecond_table_idのカラムは、それぞれのテーブルへの外部キーとして機能する。
例として、driver_idとcar_idが外部キーとなるカーシェアサービスを考える。 “driver-car”テーブルでは、5つの異なるリレーションシップが示されている:
- (id 1 と 2) - ドライバーJohn(driver_id=1)は、Subaru(car_id=1)とBMW(car_id=3)を運転した;
- (id 3, 4, 5) - ドライバーEmma(driver_id=2)は、Subaru(car_id=1)、Mercedes(car_id=2)、BMW(car_id=3)を運転した。
複数のドライバーがさまざまな車を運転している:JohnとEmmaの両方がSubaruとBMWを運転した。
データベーススキーマ図:
通常、これらの中間テーブルは図には表示されない。上記のように、driver-carテーブルは表示されていない。
1. 1対1のリレーションシップを選択してください:
2. 多対多のリレーションシップを選択してください:
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください