One-to-OneおよびMany-to-Many
メニューを表示するにはスワイプしてください
1対1
1対1リレーションシップは、あるテーブルの各レコードが別のテーブルの単一のレコードに対応する関係。 1対多リレーションシップでは、1つのテーブルのレコードが複数のレコードと関連付けられるのに対し、1対1では各レコードのペアが一意に結び付けられる。 このリレーションシップには、2つの主要な接続が含まれる:
- 最初のテーブルが、2番目のテーブルの主キーを参照する外部キーを持つ;
- 逆に、2番目のテーブルが、最初のテーブルの主キーを参照する外部キーを持つ。
1対1リレーションシップは外部キーに依存する。この外部キーには「unique=True」パラメータを含める必要がある。
特定の場合、あるレコードは他のレコードが存在する場合のみ存在できるが、後者は単独で存在できる。このようなリンクは一方必須の1対1と呼ばれる。
次の図を参照:
別の例:
必須の一対一: すべてのPassportは特定のPersonに紐付けられている必要があります。ただし、Personはパスポートを持たずに存在することもあり、例えば子供の場合が該当します。
多対多
多対多リレーションシップは、2つのテーブルが互いに複数の対応レコードを持つことができる関係であり、しばしば中間テーブルによって仲介されます。一方のテーブルの1つのレコードが他方のテーブルの複数のレコードに対応する一対多とは異なり、多対多では両方のテーブルの複数のレコードが相互に関連付けられます。
このintermediary tableには3つのカラムが必要です:id(各リレーションシップの識別子)、first_table_id、およびsecond_table_id。first_table_idとsecond_table_idのカラムは、それぞれのテーブルに戻るforeign keyとして機能します。
例えば、カーシェアリングサービスを考えてみましょう。ここでは、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つを試してチャットを始めてください