[解決済み] テーブルを設計する際に、1対1、1対多、多対多の関係をどのように実装するか?
2022-03-14 20:17:53
質問
テーブルを設計する際に、1対1、1対多、多対多の関係をどのように実装するか、いくつかの例を挙げて説明してください。
どのように解決するのですか?
1対1です。 参照されるテーブルの外部キーを使用する。
student: student_id, first_name, last_name, address_id
address: address_id, address, city, zipcode, student_id # you can have a
# "link back" if you need
また、外部キー・カラムに一意制約をかける必要があります (
addess.student_id
) に複数行が存在しないように、子テーブル (
address
) の同じ行に関連付けることができます。
student
).
一対多 : リレーションシップの多くの側で外部キーを使用して、"one" 側へリンクします。
teachers: teacher_id, first_name, last_name # the "one" side
classes: class_id, class_name, teacher_id # the "many" side
多対多 : ジャンクションテーブルを使用する ( 例 ):
student: student_id, first_name, last_name
classes: class_id, name, teacher_id
student_classes: class_id, student_id # the junction table
クエリーの例
-- Getting all students for a class:
SELECT s.student_id, last_name
FROM student_classes sc
INNER JOIN students s ON s.student_id = sc.student_id
WHERE sc.class_id = X
-- Getting all classes for a student:
SELECT c.class_id, name
FROM student_classes sc
INNER JOIN classes c ON c.class_id = sc.class_id
WHERE sc.student_id = Y
関連
-
[解決済み】識別関係と非識別関係の違いとは?
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] 複数の列でgroup byを使用する
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] INNER JOIN ON vs WHERE句
-
[解決済み] 最初の行への結合方法
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする