1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

中間テーブルをの応用

Posted at

テーブルAとテーブルBがN対Nのリレーションを持つ場合、中間テーブル (ABテーブル) を用意して効率的に検索する方法をご紹介します。これにより、テーブルAからテーブルB、またはその逆方向に検索することができます。

1. テーブル構造の定義

まず、3つのテーブル構造は以下のようになります:

テーブルA

  • a_id (主キー)
  • a_name (データ属性)

テーブルB

  • b_id (主キー)
  • b_name (データ属性)

中間テーブルAB

  • a_id (テーブルAの外部キー)
  • b_id (テーブルBの外部キー)

2. テーブルの関連図

N対Nのリレーション構造は次のように表せます:

 Aテーブル               ABテーブル                Bテーブル
+----------+       +--------------+        +----------+
| a_id     | <-->  | a_id         | <-->   | b_id     |
| a_name   |       | b_id         |        | b_name   |
+----------+       +--------------+        +----------+

3. 検索クエリ例

例1: テーブルAに関連するテーブルBのレコードを検索

特定のa_idに関連するBテーブルのデータを取得する場合、以下のクエリを使用します。

SELECT B.b_name
FROM B
JOIN AB ON B.b_id = AB.b_id
JOIN A ON A.a_id = AB.a_id
WHERE A.a_id = '指定のa_id';

例2: テーブルBに関連するテーブルAのレコードを検索

特定のb_idに関連するAテーブルのデータを取得する場合、以下のクエリを使用します。

SELECT A.a_name
FROM A
JOIN AB ON A.a_id = AB.a_id
JOIN B ON B.b_id = AB.b_id
WHERE B.b_id = '指定のb_id';

4. インデックスの活用

検索を効率化するために、中間テーブルABにはa_idb_idの両方にインデックスを作成することが推奨されます。これにより、JOIN操作が高速化され、N対Nのリレーションを効率的に検索できます。

CREATE INDEX idx_ab_a_id ON AB(a_id);
CREATE INDEX idx_ab_b_id ON AB(b_id);

この構造を利用することで、AとBのN対Nリレーションを持つデータを効率的に検索できるようになります。
対応していない形式のファイルです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?