コンテンツにスキップ

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 'カテゴリの有効期限';