EC-SPOKE 商品系データベース定義
概要
商品管理に関連するテーブル定義です。EC-CUBEの優れた設計を参考にしつつ、柔軟性と拡張性を重視した設計となっています。
設計方針
EC-CUBEからの改善点
- 商品規格システム: EC-CUBEの2軸制限を解消し、3軸以上の柔軟な規格に対応
- 階層カテゴリ: 無制限階層のカテゴリ構造
- 商品画像: JSON配列で管理(複数画像対応、表示順は配列順)
- 商品タグ: タグ機能の追加
テーブル一覧
商品系(01_商品系/)
参照マスターテーブル(外部キーなし)
注: 商品価格は基軸通貨で保存し、フロントエンドで選択された通貨に動的変換するため、直接的な外部キー制約は設定しない。
バリエーションシステムの特徴
EC-CUBEとの比較
| 項目 |
EC-CUBE |
EC-SPOKE |
| バリエーション軸数 |
2軸固定 |
無制限 |
| バリエーション例 |
サイズ・色のみ |
サイズ・色・素材・容量等 |
| 柔軟性 |
低い |
高い |
| クエリ複雑度 |
シンプル |
やや複雑 |
| 中間テーブル |
不要 |
product_var_mst_val_combs |
使用例
Tシャツ(3軸)
- サイズ: S, M, L
- 色: 赤, 青, 白
- 素材: コットン, ポリエステル
飲料(2軸)
- 容量: 350ml, 500ml
- 味: レモン, オレンジ
税率システム
個別税率設定
- 税率マスター: 消費税10%、軽減税率8%等の税率を管理
- 適用期間: 税率ごとに適用開始日時・終了日時を設定可能
- バリエーションレベル設定: 商品バリエーション(SKU)ごとに税率を個別設定
- デフォルト税率: 税率未設定の場合、システムデフォルト税率を適用
税率の使用例
-- 一般商品(消費税10%)
UPDATE product_vars SET tax_rate_id = 1 WHERE product_id IN (SELECT id FROM products WHERE ...);
-- 食品(軽減税率8%)
UPDATE product_vars SET tax_rate_id = 2 WHERE product_id IN (SELECT id FROM products WHERE ...);
設計思想
グローバルマスター方式
- product_var_msts: 全商品共通のバリエーション軸(サイズ、色、容量等)
- product_var_mst_vals: 各軸の具体的な値(S, M, L, 赤, 青等)を全商品共通で管理
- 各商品は必要な値のみを選択して使用
テーブルの役割(修正版)
| テーブル |
役割 |
データ整合性 |
| product_var_mst_rel |
商品に対する軸数を決定(2軸、3軸等) |
軸数定義 |
| product_var_mst_val_combs |
決定された軸数に基づく実際の選択肢の値 |
値の割り当て |
データの階層関係
- 軸数の決定:
product_var_mst_relで商品に使用する軸を選択
- 例: Tシャツ → サイズ、色(2軸)
- 値の割り当て:
product_var_mst_val_combsで各SKUに具体的な値を設定
- 例: SKU#1 → サイズ:S、色:赤
商品登録のデータフロー
- 商品作成: 商品マスター(products)を作成
- 軸選択: バリエーション軸を選択(product_var_mst_rel)→ 軸数定義
- SKU作成: 具体的なSKUを作成(product_vars)
- 値割当: SKUにバリエーション値を割り当て(product_var_mst_val_combs)→ 値の割り当て
データ整合性の制約
- 必須:
product_var_mst_relで選択した軸数と、product_var_mst_val_combsで実際に使用する軸数は完全一致
- 検証: SKU保存時に、軸数の一致をアプリケーション層でバリデーション
- 不整合の防止: UI側で
product_var_mst_relで選択した軸のみを選択肢として表示
中間テーブルの主キー設計
- 複合主キーに統一: すべての中間テーブルで複合主キーを使用
- 理由:
- 自然キーで十分(冗長なサロゲートキー不要)
- パフォーマンス・ストレージ効率の向上
- 対象テーブル:
category_product_rel (category_id, product_id)
product_tags_rel (product_id, tag_id)
product_var_mst_rel (product_id, product_var_mst_id)
product_var_mst_val_combs (product_var_id, product_var_mst_vals_id)
削除制約の統一
- RESTRICT方針: 全てのバリエーション関連外部キーは
ON DELETE RESTRICT
- 理由: CASCADE削除によるSKUデータの意図しない消失を防止
- 削除順序: 末端(SKU)→中間(バリエーション値)→マスター(バリエーションマスター)
- 推奨: マスターの削除は避け、
is_visible=FALSEでの無効化を推奨
更新履歴