コンテンツにスキップ

EC-SPOKE 商品系データベース定義

概要

商品管理に関連するテーブル定義です。EC-CUBEの優れた設計を参考にしつつ、柔軟性と拡張性を重視した設計となっています。

設計方針

EC-CUBEからの改善点

  • 商品規格システム: EC-CUBEの2軸制限を解消し、3軸以上の柔軟な規格に対応
  • 階層カテゴリ: 無制限階層のカテゴリ構造
  • 商品画像: JSON配列で管理(複数画像対応、表示順は配列順)
  • 商品タグ: タグ機能の追加

テーブル一覧

商品系(01_商品系/)

参照マスターテーブル(外部キーなし)

テーブル名 説明 用途 リンク
currencies 通貨マスター 動的な通貨変換(アプリケーション層で参照) マスター/currencies.md
tax_rates 税率マスター 商品の税率管理(消費税10%、軽減税率8%等) マスター/tax_rates.md

: 商品価格は基軸通貨で保存し、フロントエンドで選択された通貨に動的変換するため、直接的な外部キー制約は設定しない。

バリエーションシステムの特徴

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 決定された軸数に基づく実際の選択肢の値 値の割り当て

データの階層関係

  1. 軸数の決定: product_var_mst_relで商品に使用する軸を選択
  2. 例: Tシャツ → サイズ、色(2軸)
  3. 値の割り当て: product_var_mst_val_combsで各SKUに具体的な値を設定
  4. 例: SKU#1 → サイズ:S、色:赤

商品登録のデータフロー

  1. 商品作成: 商品マスター(products)を作成
  2. 軸選択: バリエーション軸を選択(product_var_mst_rel)→ 軸数定義
  3. SKU作成: 具体的なSKUを作成(product_vars)
  4. 値割当: 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での無効化を推奨

更新履歴

  • 2024-01-XX: 初版作成(商品系のみ)