コンテンツにスキップ

product_vars テーブル定義

概要

商品の具体的なSKU(在庫管理単位)を管理するテーブル。価格、在庫、商品コード等の実際の販売情報を格納する。

テーブル情報

項目
テーブル名 product_vars
エンジン InnoDB
文字セット utf8mb4
照合順序 utf8mb4_unicode_ci
コメント 商品バリエーション/SKU

カラム定義

カラム名 NULL デフォルト キー 説明
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PK 主キー
product_id BIGINT UNSIGNED NOT NULL - FK 商品ID(products.id)
product_code VARCHAR(255) NULL NULL UNIQUE 社内商品コード
jan_code VARCHAR(255) NULL NULL UNIQUE JANコード
cost_price DECIMAL(10,3) NULL NULL - 仕入価格(非公開・税抜)
regular_price DECIMAL(10,3) NULL NULL - 通常価格(定価・税抜)
price DECIMAL(10,3) NOT NULL - - 販売価格(通常時の実売・税抜)
special_price DECIMAL(10,3) NULL NULL - セール・特別価格(税抜)
member_price DECIMAL(10,3) NULL NULL - 会員向け価格(税抜)
tax_rate_id BIGINT UNSIGNED NULL NULL FK 税率ID(tax_rates.id、NULLの場合はデフォルト税率)
stock INT NULL NULL INDEX 在庫数
stock_unlimited BOOLEAN NOT NULL FALSE - 無制限在庫フラグ
sale_limit INT NULL NULL - 購入制限数(1回の注文で)
is_active BOOLEAN NOT NULL TRUE INDEX 販売中フラグ
created_at TIMESTAMP NULL NULL - 作成日時
updated_at TIMESTAMP NULL NULL - 更新日時

インデックス

種別 名称 対象カラム 説明
PRIMARY KEY pk_product_vars id 主キー
UNIQUE KEY uk_product_code product_code 社内商品コードの重複防止
UNIQUE KEY uk_jan_code jan_code JANコードの重複防止
INDEX idx_product_active product_id, is_active 商品別の販売中バリエーション検索
INDEX idx_stock stock 在庫数検索(在庫切れ商品等)

外部キー制約

名称 対象カラム 参照先 ON DELETE ON UPDATE 説明
fk_product_vars_product product_id products(id) CASCADE RESTRICT 商品削除時に関連バリエーションも削除
fk_product_vars_tax_rate tax_rate_id tax_rates(id) SET NULL RESTRICT 税率削除時はNULL(デフォルト税率にフォールバック)

リレーション

関連先テーブル 関連タイプ 外部キー 参照先 ON DELETE ON UPDATE 説明
products N:1 product_id id CASCADE RESTRICT 商品バリエーションは1つの商品に属する(レジ種別は商品レベルで管理)
tax_rates N:1 tax_rate_id id SET NULL RESTRICT 商品バリエーションは1つの税率を持つ(NULLの場合はデフォルト税率)
product_var_mst_val_combs 1:N id product_var_id CASCADE RESTRICT 1つの商品バリエーションは複数のバリエーション値組み合わせを持つ
order_items 1:N product_var_id id SET NULL RESTRICT 1つの商品バリエーションは複数の注文明細で使用される

データ例

id product_id product_code jan_code cost_price regular_price price special_price member_price tax_rate_id stock stock_unlimited sale_limit is_active
1 100 TSH-S-RED 4901234567890 500.000 3000.000 2500.000 2400.000 2200.000 1 50 FALSE 5 TRUE
2 100 TSH-M-BLUE 4901234567891 500.000 3000.000 2500.000 NULL 2200.000 1 30 FALSE 5 TRUE
3 200 DRINK-500-LEM 4901234567892 50.000 200.000 150.000 NULL NULL 2 1000 FALSE 10 TRUE
4 300 EBOOK-BASIC NULL 0.000 980.000 980.000 NULL NULL NULL NULL TRUE NULL TRUE
5 400 SUBSCRIPTION-MONTHLY 4901234567893 500.000 2000.000 1800.000 NULL NULL 1 NULL TRUE NULL TRUE

備考・注意事項

多軸バリエーション対応

  • 設計: product_var_mst_val_combsテーブル経由で複数のバリエーション値を組み合わせて表現
  • : Tシャツ「S-赤」は、サイズSと色赤の2つのバリエーション値の組み合わせ
  • 柔軟性: 1軸、2軸、3軸など、商品ごとに異なる軸数に対応可能
  • 制約: 各商品で選択した軸数と、作成するSKUの軸数は必ず一致する必要がある

価格管理

注意: すべての価格は税抜き価格で登録する

税率管理

個別税率設定(将来の拡張予定)

  • tax_rate_id: 商品バリエーション個別の税率を設定(Migrationに存在するが、管理画面では未実装)
  • NULL許容: 税率未設定(NULL)の場合、システムデフォルト税率を適用
  • 税率マスター参照: tax_ratesテーブルを参照

多通貨対応

設計方針: 基軸通貨で統一保存、表示時に動的変換

  • 基準通貨方式: すべての価格は基軸通貨(JPY)で保存
  • 通貨マスター: システム全体で使用する通貨情報をcurrenciesテーブルで管理
  • 動的変換: フロントエンドで選択された通貨に応じて、為替レートで計算して表示
  • 表示精度: 通貨ごとに適切な桁数で表示(日本円2桁、米ドル等4桁)

詳細設計: 価格計算設計資料を参照

価格の種類と用途

カラム 用途 公開/非公開 説明
cost_price 仕入価格 非公開 原価管理用(フロントエンドでは非表示)
regular_price 通常価格(定価) 公開 商品の定価(参考価格として表示、必須ではない)
price 販売価格(実売) 公開 通常時の実際の販売価格(最も使う)
special_price セール・特別価格 公開 期間限定とは限らない特別価格
member_price 会員向け価格 公開 会員限定の価格

価格の関係性

  • cost_price < price < regular_price (一般的な関係、regular_priceがNULLの場合は適用されない)
  • special_priceprice より安い場合が多い
  • member_priceprice より安い場合が多い
  • regular_price は必須ではない(定価を設定しない商品も可)

在庫管理

  • stock_unlimited = TRUE: 在庫無制限(stockはNULL)
  • stock_unlimited = FALSE: 在庫制限あり(stockで管理)
  • 在庫切れ: stock = 0 かつ stock_unlimited = FALSE

販売制限

  • sale_limit: 1回の注文での購入上限(NULL=制限なし)
  • 例: 限定商品で1人3個まで

商品コード管理

  • product_code: 社内商品コード(管理用)
  • jan_code: JANコード(バーコード用)
  • それぞれ独立して管理(重複不可)

レジ種別管理

レジ種別は商品レベル(products.register_type_id)で管理します。商品バリエーション(product_vars)にはレジ種別カラムは存在しません。

  • 商品レベル管理: 商品全体のレジ種別はproducts.register_type_idで管理
  • バリエーション: すべてのバリエーションは親商品のレジ種別を継承
  • レジ種別マスター参照: register_typesテーブルを参照

販売中フラグ

  • is_active = TRUE: 販売中(フロントエンドで表示・購入可能)
  • is_active = FALSE: 販売停止(管理画面でのみ表示、フロントエンドでは非表示・購入不可)
  • 一時的に販売を停止したいバリエーションに使用