コンテンツにスキップ

products テーブル定義

テーブル概要

商品の基本情報を管理するマスターテーブルです。既存テーブルを拡張し、商品規格システムに対応させています。

テーブル名: products 説明: 商品マスター 用途: 商品の基本情報(名前、説明、ステータス等)を管理

カラム定義

カラム名 NULL デフォルト キー 説明
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PK 主キー
brand_id BIGINT UNSIGNED NULL NULL FK ブランドID(brands.id)
creator_id BIGINT UNSIGNED NULL NULL FK 作成者ID(admins.id)
register_type_id BIGINT UNSIGNED NULL NULL FK レジ種別ID(register_types.id)
name VARCHAR(255) NOT NULL - - 商品名
slug VARCHAR(255) NOT NULL - UNIQUE URL用スラッグ
image JSON NULL NULL - 商品画像(配列、表示順は配列順)
description TEXT NULL NULL - 商品説明(既存)
description_list TEXT NULL NULL - 商品一覧用説明文(新規)
search_word TEXT NULL NULL - 検索キーワード(新規)
free_area TEXT NULL NULL - フリーエリア(HTML可)(新規)
status TINYINT UNSIGNED NOT NULL 1 INDEX ステータス(1=公開, 2=非公開)
is_active BOOLEAN NOT NULL TRUE INDEX 販売状態(TRUE=販売中、FALSE=販売中止)
on_sale BOOLEAN NOT NULL TRUE - セール中フラグ(TRUE=セール中、FALSE=通常価格)
sort_order INTEGER NOT NULL 0 INDEX 表示順序
created_at TIMESTAMP NULL NULL - 作成日時
updated_at TIMESTAMP NULL NULL - 更新日時
deleted_at TIMESTAMP NULL NULL INDEX 削除日時(Soft Delete)

インデックス

種別 名称 対象カラム 説明
PRIMARY KEY pk_products id 主キー
UNIQUE KEY uk_products_slug slug URL用スラッグの重複防止
INDEX idx_products_status status ステータス別検索
INDEX idx_products_is_active is_active 販売状態別検索
INDEX idx_products_sort_order sort_order 表示順序別検索
INDEX idx_products_creator creator_id 作成者別検索
INDEX idx_products_deleted deleted_at Soft Delete用

外部キー制約

名称 対象カラム 参照先 ON DELETE ON UPDATE 説明
fk_products_brand brand_id brands(id) SET NULL RESTRICT ブランド削除時はNULL
fk_products_creator creator_id admins(id) SET NULL RESTRICT 作成者削除時はNULL
fk_products_register_type register_type_id register_types(id) RESTRICT RESTRICT レジ種別を削除しようとした時に、そのレジ種別を使用している商品があるとエラー

リレーション

関連先テーブル 関連タイプ 外部キー 参照先 ON DELETE ON UPDATE 説明
brands N:1 brand_id id SET NULL RESTRICT 商品は1つのブランドに属する
admins N:1 creator_id id SET NULL RESTRICT 商品は1人の作成者を持つ
register_types N:1 register_type_id id RESTRICT RESTRICT 商品は1つのレジ種別に属する(商品削除はレジ種別に影響なし、レジ種別削除時は使用中の商品があるとエラー)
category_product_rel 1:N product_id id CASCADE RESTRICT 商品削除時に中間テーブル側も削除
categories N:N category_id id (category_product_rel経由) 商品は複数のカテゴリに属する
product_var_mst_rel 1:N product_id id CASCADE RESTRICT 商品削除時に中間テーブル側も削除
product_var_msts N:N product_var_mst_id id (product_var_mst_rel経由) 商品は複数のバリエーションマスターを使用する
product_vars 1:N product_id id CASCADE RESTRICT 1つの商品は複数の商品バリエーションを持つ
product_tags_rel 1:N product_id id CASCADE RESTRICT 商品削除時に中間テーブル側も削除
tags N:N product_id id (product_tags_rel経由) 商品は複数のタグを持つ
order_items 1:N product_id id SET NULL RESTRICT 1つの商品は複数の注文明細で使用される

データ例

id brand_id creator_id register_type_id name slug status description_list description_detail
100 1 1 1 コットンTシャツ cotton-t-shirt 1 着心地の良いコットンTシャツ 100%コットン素材で作られた...
200 2 1 1 レモン飲料 lemon-drink 1 さわやかなレモン味 国産レモンを使用した...
300 NULL 1 NULL 電子書籍 ebook-basic 1 プログラミング入門書 初心者向けのプログラミング...

備考・注意事項

既存からの変更点

削除されたカラム

  • price → product_vars.priceに移行
  • stock_quantity → product_vars.stockに移行
  • is_unlimited_stock → product_vars.stock_unlimitedに移行
  • is_featured → 将来の機能拡張で追加予定

残存カラム(フロントエンドで使用)

  • on_sale: セール中フラグ(TRUE=セール中、FALSE=通常価格)
  • Migrationに存在し、フロントエンドで使用されている
  • 管理画面(ProductResource)では編集不可(Modelのfillableに含まれていない)
  • 注: product_vars.special_priceとは別の概念として存在

新規追加カラム

  • description_list: 商品一覧ページ用の短い説明
  • search_word: 検索機能用のキーワード
  • free_area: 自由記述エリア(HTML可)
  • status: 公開/非公開の管理(1=公開, 2=非公開)
  • is_active: 販売中/販売中止の管理(TRUE=販売中, FALSE=販売中止)※既存カラムを再利用
  • creator_id: 作成者管理
  • register_type_id: レジ種別管理(NULL可、削除時はRESTRICT)

ステータス管理(status)

名称 説明
1 Published 公開(フロントエンドで表示)
2 Draft 非公開(管理画面のみ)

販売状態管理(is_active)

説明
TRUE 販売中(購入可能)
FALSE 販売中止(表示のみ、購入不可)

削除管理(deleted_at)

説明
NULL 有効
TIMESTAMP 削除済み(Soft Delete)

3つの概念の使い分け

ケース1: 公開中・販売中の商品

status = 1 (Published)
is_active = TRUE
deleted_at = NULL
→ サイトで表示、購入可能

ケース2: 公開中・販売中止の商品

status = 1 (Published)
is_active = FALSE
deleted_at = NULL
→ サイトで表示、購入不可(「販売終了」等のメッセージ表示)

ケース3: 非公開・販売中の商品(準備中)

status = 2 (Draft)
is_active = TRUE
deleted_at = NULL
→ サイトで非表示、管理画面で編集可能

ケース4: 削除された商品

status = 1 or 2
is_active = TRUE or FALSE
deleted_at = '2024-01-01 00:00:00'
→ サイトで非表示、管理画面で「削除済み」扱い

説明文の使い分け

  • description: 既存データとの互換性のため維持
  • description_list: 商品一覧ページで表示(短め)

画像管理

  • image: JSON配列(表示順は配列順)
  • 外部テーブル化は行わない(検索が稀なため)