category_product_rel テーブル定義
テーブル概要
商品とカテゴリを多対多で関連付ける中間テーブルです。1つの商品に複数のカテゴリを付与し、1つのカテゴリに複数の商品を分類できます。
テーブル名: category_product_rel
説明: 商品-カテゴリ関連
用途: 商品とカテゴリの多対多関連管理
カラム定義
| カラム名 |
型 |
NULL |
デフォルト |
キー |
説明 |
| category_id |
BIGINT UNSIGNED |
NOT NULL |
- |
PK,FK |
カテゴリID(categories.id) |
| product_id |
BIGINT UNSIGNED |
NOT NULL |
- |
PK,FK |
商品ID(products.id) |
| created_at |
TIMESTAMP |
NULL |
NULL |
- |
作成日時 |
| updated_at |
TIMESTAMP |
NULL |
NULL |
- |
更新日時 |
インデックス
| 種別 |
名称 |
対象カラム |
説明 |
| PRIMARY KEY |
pk_category_product_rel |
category_id, product_id |
複合主キー |
| INDEX |
idx_product_id |
product_id |
商品別のカテゴリ検索 |
外部キー制約
| 名称 |
対象カラム |
参照先 |
ON DELETE |
ON UPDATE |
説明 |
| fk_category_product_rel_category |
category_id |
categories(id) |
CASCADE |
RESTRICT |
カテゴリ削除時に関連も削除 |
| fk_category_product_rel_product |
product_id |
products(id) |
CASCADE |
RESTRICT |
商品削除時に関連も削除 |
リレーション
| 関連先テーブル |
関連タイプ |
外部キー |
参照先 |
ON DELETE |
ON UPDATE |
説明 |
| categories |
N:1 |
category_id |
id |
CASCADE |
RESTRICT |
商品-カテゴリ関連はカテゴリに属する |
| products |
N:1 |
product_id |
id |
CASCADE |
RESTRICT |
商品-カテゴリ関連は商品に属する |
データ例
| category_id |
product_id |
created_at |
| 1 |
100 |
2024-01-01 10:00:00 |
| 2 |
100 |
2024-01-01 10:00:00 |
| 3 |
100 |
2024-01-01 10:00:00 |
| 1 |
200 |
2024-01-01 11:00:00 |
| 4 |
200 |
2024-01-01 11:00:00 |
| 2 |
300 |
2024-01-01 12:00:00 |
| 5 |
300 |
2024-01-01 12:00:00 |
備考・注意事項
中間テーブルの特徴
複合主キー
category_id + product_id の組み合わせでユニーク
- 同じ商品に同じカテゴリを複数回付与不可
- 自動インクリメントIDは不要
タイムスタンプ
created_at: カテゴリ付与日時
updated_at: 関連の更新日時(通常は変更されない)
パフォーマンス考慮
インデックス最適化
- 複合主キー:
(category_id, product_id)で高速検索
- 追加インデックス:
product_id単体のインデックスで商品別検索を高速化
将来の拡張
カテゴリの重み付け
-- カテゴリの重要度を追加
ALTER TABLE category_product_rel
ADD COLUMN weight DECIMAL(3,2) DEFAULT 1.00 COMMENT 'カテゴリの重み(0.1-1.0)';
カテゴリの有効期限
-- カテゴリの有効期限を追加
ALTER TABLE category_product_rel
ADD COLUMN expires_at TIMESTAMP NULL COMMENT 'カテゴリの有効期限';