brands テーブル定義
テーブル概要
商品ブランドのマスターテーブルです。商品にブランド情報を付与し、ブランド別の商品管理を可能にします。
テーブル名: brands
説明: ブランドマスター
用途: 商品のブランド情報管理(ブランド名、ロゴ画像、有効性等)
カラム定義
| カラム名 | 型 | NULL | デフォルト | キー | 説明 |
|---|---|---|---|---|---|
| id | BIGINT UNSIGNED | NOT NULL | AUTO_INCREMENT | PK | 主キー |
| name | VARCHAR(255) | NOT NULL | - | - | ブランド名 |
| slug | VARCHAR(255) | NOT NULL | - | UNIQUE | URL用スラッグ |
| logo_image | VARCHAR(255) | NULL | NULL | - | ブランドロゴ画像パス |
| images | JSON | NULL | NULL | - | ブランド画像(複数、JSON配列) |
| description | TEXT | NULL | NULL | - | ブランド説明(リッチエディタ対応) |
| is_active | BOOLEAN | NOT NULL | TRUE | INDEX | 有効フラグ |
| sort_order | INTEGER | NOT NULL | 0 | INDEX | 表示順序 |
| created_at | TIMESTAMP | NULL | NULL | - | 作成日時 |
| updated_at | TIMESTAMP | NULL | NULL | - | 更新日時 |
インデックス
| 種別 | 名称 | 対象カラム | 説明 |
|---|---|---|---|
| PRIMARY KEY | pk_brands | id | 主キー |
| UNIQUE KEY | uk_brands_slug | slug | URL用スラッグの重複防止 |
| INDEX | idx_brands_is_active | is_active | 有効フラグ別検索 |
| INDEX | idx_brands_sort_order | sort_order | 表示順序別検索 |
外部キー制約
なし(マスターテーブルのため)
リレーション
| 関連先テーブル | 関連タイプ | 外部キー | 参照先 | ON DELETE | ON UPDATE | 説明 |
|---|---|---|---|---|---|---|
| products | 1:N | id | brand_id | SET NULL | RESTRICT | 1つのブランドは複数の商品を持つ |
データ例
| id | name | slug | logo_image | is_active |
|---|---|---|---|---|
| 1 | ナイキ | nike | brands/nike-logo.png | TRUE |
| 2 | アディダス | adidas | brands/adidas-logo.png | TRUE |
| 3 | プーマ | puma | brands/puma-logo.png | TRUE |
| 4 | アンダーアーマー | under-armour | brands/under-armour-logo.png | FALSE |
備考・注意事項
ブランド管理
命名規則
name: 表示用(「ナイキ」「アディダス」等)slug: URL用(「nike」「adidas」等)- 日本語と英語の両方に対応
有効フラグ管理
is_active: ブランドの有効/無効を制御- FALSEの場合、フロントエンドで非表示
- 商品が属するブランドは無効化不可(UI側で制御)
画像管理
logo_image: ブランドロゴ画像のパス(単一画像、VARCHAR型)images: ブランド画像(複数画像、JSON配列形式)- 例:
["brands/image1.jpg", "brands/image2.jpg"] - ファイルアップロードは
public/brands/ディレクトリに保存 - 画像形式: JPG, PNG, GIF等(FilamentのFileUploadコンポーネントで制御)
リッチエディタ管理
description: ブランド説明文(TEXT型、リッチエディタ対応)- FilamentのRichEditorコンポーネントを使用
- HTML形式で保存可能
パフォーマンス考慮
- インデックス:
is_activeにインデックスを設定して有効ブランド検索を高速化 - Eager Loading: 商品とブランドを一括取得
- キャッシュ: ブランド一覧は頻繁に変更されないためキャッシュ推奨
将来の拡張
ブランドの詳細情報
-- ブランドの詳細情報を追加
ALTER TABLE brands
ADD COLUMN description TEXT NULL COMMENT 'ブランド説明',
ADD COLUMN website_url VARCHAR(255) NULL COMMENT 'ブランド公式サイトURL',
ADD COLUMN country VARCHAR(100) NULL COMMENT 'ブランドの国';
ブランドの階層化
-- ブランドグループの追加
CREATE TABLE brand_groups (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
sort_order INT UNSIGNED DEFAULT 0
);
-- ブランドにグループを追加
ALTER TABLE brands
ADD COLUMN brand_group_id BIGINT UNSIGNED NULL,
ADD FOREIGN KEY (brand_group_id) REFERENCES brand_groups(id);
ブランドの表示順序(実装済み)
sort_order: ブランドの表示順序を制御(INTEGER型、デフォルト値0)- 管理画面でドラッグ&ドロップによる並び替えが可能
- インデックス
idx_brands_sort_orderが設定されており、ソート処理が高速化
削除時の注意
外部キー制約: ON DELETE SET NULL
- ブランド削除時、関連商品の
brand_idは自動的にNULLに設定される - 商品本体は残る(削除されない)
- UI推奨: 削除前に所属商品数を表示し、警告を出す
- 例: 「このブランドには5件の商品があります。ブランドを削除すると、商品は『ブランドなし』になります。よろしいですか?」
- 削除後、商品は「ブランドなし」として表示される