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_price は price より安い場合が多い
- member_price は price より安い場合が多い
- 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: 販売停止(管理画面でのみ表示、フロントエンドでは非表示・購入不可)
- 一時的に販売を停止したいバリエーションに使用