# データベース設計書

## 概要

本ドキュメントは、Bagisto App Demo（オープンソースEコマースモバイルアプリ）のデータベース設計を記述したものです。このアプリケーションはFlutterで構築されており、GraphQL APIを通じてバックエンドのBagisto（Laravel製Eコマースプラットフォーム）と通信します。本設計書では、モバイルアプリ側で扱うデータモデルから推定されるバックエンドデータベースのエンティティ構造を定義しています。

## テーブル一覧

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| customers | Customer | 顧客情報を管理するテーブル |
| customer_groups | CustomerGroup | 顧客グループを管理するテーブル |
| addresses | Address | 顧客の住所情報を管理するテーブル |
| categories | Category | 商品カテゴリを管理するテーブル |
| products | Product | 商品の基本情報を管理するテーブル |
| product_flats | ProductFlat | 商品のローカライズ情報を管理するテーブル |
| product_images | ProductImage | 商品画像を管理するテーブル |
| product_inventories | ProductInventory | 商品在庫を管理するテーブル |
| inventory_sources | InventorySource | 在庫ソース（倉庫）を管理するテーブル |
| attribute_families | AttributeFamily | 属性ファミリーを管理するテーブル |
| attributes | Attribute | 商品属性を管理するテーブル |
| attribute_options | AttributeOption | 属性オプションを管理するテーブル |
| product_attribute_values | ProductAttributeValue | 商品属性値を管理するテーブル |
| product_variants | ProductVariant | 商品バリエーションを管理するテーブル |
| carts | Cart | カート情報を管理するテーブル |
| cart_items | CartItem | カート内商品を管理するテーブル |
| cart_addresses | CartAddress | カートの配送先住所を管理するテーブル |
| cart_shipping_rates | CartShippingRate | カートの配送料金を管理するテーブル |
| cart_payments | CartPayment | カートの支払い情報を管理するテーブル |
| orders | Order | 注文情報を管理するテーブル |
| order_items | OrderItem | 注文商品を管理するテーブル |
| order_addresses | OrderAddress | 注文の住所情報を管理するテーブル |
| order_payments | OrderPayment | 注文の支払い情報を管理するテーブル |
| shipments | Shipment | 出荷情報を管理するテーブル |
| shipment_items | ShipmentItem | 出荷商品を管理するテーブル |
| invoices | Invoice | 請求書情報を管理するテーブル |
| invoice_items | InvoiceItem | 請求書商品を管理するテーブル |
| reviews | Review | 商品レビューを管理するテーブル |
| wishlists | Wishlist | お気に入りリストを管理するテーブル |
| downloadable_products | DownloadableProduct | ダウンロード商品を管理するテーブル |
| bundle_options | BundleOption | バンドル商品オプションを管理するテーブル |
| bundle_option_products | BundleOptionProduct | バンドルオプション商品を管理するテーブル |
| grouped_products | GroupedProduct | グループ商品を管理するテーブル |
| customer_group_prices | CustomerGroupPrice | 顧客グループ別価格を管理するテーブル |
| locales | Locale | ロケール（言語）を管理するテーブル |
| currencies | Currency | 通貨を管理するテーブル |
| channels | Channel | 販売チャネルを管理するテーブル |

## 各テーブル定義

### 1. customers

顧客アカウント情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| email | VARCHAR(255) | NO | メールアドレス |
| first_name | VARCHAR(255) | NO | 名 |
| last_name | VARCHAR(255) | NO | 姓 |
| image_url | VARCHAR(255) | YES | プロフィール画像URL |
| date_of_birth | DATE | YES | 生年月日 |
| phone | VARCHAR(50) | YES | 電話番号 |
| subscribed_to_news_letter | BOOLEAN | YES | ニュースレター購読フラグ |
| password | VARCHAR(255) | NO | パスワード（ハッシュ化） |
| api_token | VARCHAR(255) | YES | APIトークン |
| customer_group_id | BIGINT | YES | 顧客グループID（外部キー） |
| is_verified | BOOLEAN | YES | メール認証済みフラグ |
| status | BOOLEAN | YES | アカウント有効フラグ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 2. customer_groups

顧客グループを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| name | VARCHAR(255) | NO | グループ名 |
| code | VARCHAR(100) | YES | グループコード |
| is_user_defined | BOOLEAN | YES | ユーザー定義フラグ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 3. addresses

顧客の住所情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| customer_id | BIGINT | YES | 顧客ID（外部キー） |
| first_name | VARCHAR(255) | NO | 名 |
| last_name | VARCHAR(255) | NO | 姓 |
| email | VARCHAR(255) | YES | メールアドレス |
| company_name | VARCHAR(255) | YES | 会社名 |
| vat_id | VARCHAR(100) | YES | VAT ID |
| address1 | TEXT | NO | 住所1 |
| country | VARCHAR(100) | NO | 国コード |
| country_name | VARCHAR(255) | YES | 国名 |
| state | VARCHAR(100) | YES | 都道府県コード |
| state_name | VARCHAR(255) | YES | 都道府県名 |
| city | VARCHAR(255) | NO | 市区町村 |
| postcode | VARCHAR(20) | NO | 郵便番号 |
| phone | VARCHAR(50) | NO | 電話番号 |
| default_address | BOOLEAN | YES | デフォルト住所フラグ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 4. categories

商品カテゴリを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| name | VARCHAR(255) | NO | カテゴリ名 |
| description | TEXT | YES | 説明 |
| slug | VARCHAR(255) | NO | URLスラッグ |
| url_path | VARCHAR(255) | YES | URLパス |
| image_url | VARCHAR(255) | YES | カテゴリ画像URL |
| banner_url | VARCHAR(255) | YES | バナー画像URL |
| logo_url | VARCHAR(255) | YES | ロゴ画像URL |
| meta_title | VARCHAR(255) | YES | メタタイトル |
| meta_description | TEXT | YES | メタディスクリプション |
| meta_keywords | VARCHAR(255) | YES | メタキーワード |
| position | INT | YES | 表示順 |
| status | BOOLEAN | YES | 有効フラグ |
| display_mode | VARCHAR(50) | YES | 表示モード |
| parent_id | BIGINT | YES | 親カテゴリID（外部キー） |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 5. products

商品の基本情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| type | VARCHAR(50) | NO | 商品タイプ（simple, configurable, bundle等） |
| sku | VARCHAR(255) | NO | SKU（商品コード） |
| parent_id | BIGINT | YES | 親商品ID（バリエーション用） |
| attribute_family_id | BIGINT | YES | 属性ファミリーID（外部キー） |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 6. product_flats

商品のローカライズ情報を管理するテーブルです（非正規化テーブル）。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| sku | VARCHAR(255) | YES | SKU |
| product_number | VARCHAR(255) | YES | 商品番号 |
| name | VARCHAR(255) | YES | 商品名 |
| description | TEXT | YES | 商品説明 |
| short_description | TEXT | YES | 短い説明 |
| url_key | VARCHAR(255) | YES | URLキー |
| new | BOOLEAN | YES | 新商品フラグ |
| featured | BOOLEAN | YES | おすすめフラグ |
| status | BOOLEAN | YES | 有効フラグ |
| visible_individually | BOOLEAN | YES | 個別表示フラグ |
| price | DECIMAL(12,4) | YES | 通常価格 |
| special_price | DECIMAL(12,4) | YES | セール価格 |
| special_price_from | DATE | YES | セール開始日 |
| special_price_to | DATE | YES | セール終了日 |
| min_price | DECIMAL(12,4) | YES | 最低価格 |
| max_price | DECIMAL(12,4) | YES | 最高価格 |
| weight | DECIMAL(12,4) | YES | 重量 |
| color | INT | YES | 色属性ID |
| color_label | VARCHAR(255) | YES | 色ラベル |
| size | INT | YES | サイズ属性ID |
| size_label | VARCHAR(255) | YES | サイズラベル |
| locale | VARCHAR(10) | NO | ロケールコード |
| channel | VARCHAR(50) | NO | チャネルコード |
| meta_title | VARCHAR(255) | YES | メタタイトル |
| meta_keywords | VARCHAR(255) | YES | メタキーワード |
| meta_description | TEXT | YES | メタディスクリプション |
| width | INT | YES | 幅 |
| height | INT | YES | 高さ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 7. product_images

商品画像を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| path | VARCHAR(255) | YES | 画像パス |
| url | VARCHAR(255) | YES | 画像URL |
| position | INT | YES | 表示順 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 8. product_inventories

商品在庫を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| inventory_source_id | BIGINT | NO | 在庫ソースID（外部キー） |
| qty | INT | NO | 在庫数量 |
| vendor_id | BIGINT | YES | ベンダーID |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 9. inventory_sources

在庫ソース（倉庫）を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| code | VARCHAR(100) | NO | ソースコード |
| name | VARCHAR(255) | NO | ソース名 |
| description | TEXT | YES | 説明 |
| contact_name | VARCHAR(255) | YES | 担当者名 |
| contact_email | VARCHAR(255) | YES | 担当者メールアドレス |
| contact_number | VARCHAR(50) | YES | 担当者電話番号 |
| country | VARCHAR(100) | YES | 国 |
| state | VARCHAR(100) | YES | 都道府県 |
| city | VARCHAR(255) | YES | 市区町村 |
| street | VARCHAR(255) | YES | 番地 |
| postcode | VARCHAR(20) | YES | 郵便番号 |
| priority | INT | YES | 優先度 |
| status | BOOLEAN | YES | 有効フラグ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 10. attribute_families

属性ファミリーを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| code | VARCHAR(100) | NO | ファミリーコード |
| name | VARCHAR(255) | NO | ファミリー名 |
| status | BOOLEAN | YES | 有効フラグ |
| is_user_defined | BOOLEAN | YES | ユーザー定義フラグ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 11. attributes

商品属性を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| code | VARCHAR(100) | NO | 属性コード |
| admin_name | VARCHAR(255) | NO | 管理者向け名称 |
| type | VARCHAR(50) | NO | 属性タイプ |
| position | INT | YES | 表示順 |
| is_filterable | BOOLEAN | YES | フィルタリング可能フラグ |
| swatch_type | VARCHAR(50) | YES | スウォッチタイプ |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 12. attribute_options

属性オプションを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| attribute_id | BIGINT | NO | 属性ID（外部キー） |
| label | VARCHAR(255) | YES | ラベル |
| swatch_value | VARCHAR(255) | YES | スウォッチ値 |
| sort_order | INT | YES | ソート順 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 13. product_attribute_values

商品属性値を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| attribute_id | BIGINT | NO | 属性ID（外部キー） |
| locale | VARCHAR(10) | YES | ロケール |
| channel | VARCHAR(50) | YES | チャネル |
| text_value | TEXT | YES | テキスト値 |
| boolean_value | BOOLEAN | YES | ブール値 |
| integer_value | INT | YES | 整数値 |
| float_value | DECIMAL(12,4) | YES | 小数値 |
| datetime_value | DATETIME | YES | 日時値 |
| date_value | DATE | YES | 日付値 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 14. product_variants

商品バリエーションを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 親商品ID（外部キー） |
| variant_id | BIGINT | NO | バリエーション商品ID（外部キー） |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 15. carts

カート情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| customer_id | BIGINT | YES | 顧客ID（外部キー） |
| coupon_code | VARCHAR(100) | YES | クーポンコード |
| items_count | INT | YES | アイテム数 |
| items_qty | INT | YES | 商品総数量 |
| grand_total | DECIMAL(12,4) | YES | 総計 |
| sub_total | DECIMAL(12,4) | YES | 小計 |
| tax_total | DECIMAL(12,4) | YES | 税額合計 |
| discount_amount | DECIMAL(12,4) | YES | 割引額 |
| is_guest | BOOLEAN | YES | ゲストフラグ |
| channel_id | BIGINT | YES | チャネルID |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 16. cart_items

カート内商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| cart_id | BIGINT | NO | カートID（外部キー） |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| type | VARCHAR(50) | YES | 商品タイプ |
| name | VARCHAR(255) | YES | 商品名 |
| sku | VARCHAR(255) | YES | SKU |
| quantity | INT | NO | 数量 |
| price | DECIMAL(12,4) | YES | 単価 |
| total | DECIMAL(12,4) | YES | 合計 |
| additional | JSON | YES | 追加情報 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 17. cart_addresses

カートの配送先住所を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| cart_id | BIGINT | NO | カートID（外部キー） |
| address_type | VARCHAR(50) | NO | 住所タイプ（billing/shipping） |
| address1 | TEXT | YES | 住所 |
| city | VARCHAR(255) | YES | 市区町村 |
| state | VARCHAR(100) | YES | 都道府県 |
| country | VARCHAR(100) | YES | 国 |
| postcode | VARCHAR(20) | YES | 郵便番号 |
| phone | VARCHAR(50) | YES | 電話番号 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 18. cart_shipping_rates

カートの配送料金を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| cart_id | BIGINT | NO | カートID（外部キー） |
| method | VARCHAR(100) | YES | 配送方法コード |
| method_title | VARCHAR(255) | YES | 配送方法名 |
| price | DECIMAL(12,4) | YES | 配送料金 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 19. cart_payments

カートの支払い情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| cart_id | BIGINT | NO | カートID（外部キー） |
| method | VARCHAR(100) | YES | 支払い方法コード |
| method_title | VARCHAR(255) | YES | 支払い方法名 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 20. orders

注文情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| increment_id | VARCHAR(50) | NO | 注文番号 |
| customer_id | BIGINT | YES | 顧客ID（外部キー） |
| status | VARCHAR(50) | NO | 注文ステータス |
| total_qty_ordered | INT | YES | 注文商品総数量 |
| grand_total | DECIMAL(12,4) | YES | 総計 |
| sub_total | DECIMAL(12,4) | YES | 小計 |
| tax_amount | DECIMAL(12,4) | YES | 税額 |
| discount_amount | DECIMAL(12,4) | YES | 割引額 |
| shipping_amount | DECIMAL(12,4) | YES | 送料 |
| shipping_title | VARCHAR(255) | YES | 配送方法名 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 21. order_items

注文商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| order_id | BIGINT | NO | 注文ID（外部キー） |
| product_id | BIGINT | YES | 商品ID（外部キー） |
| sku | VARCHAR(255) | YES | SKU |
| type | VARCHAR(50) | YES | 商品タイプ |
| name | VARCHAR(255) | YES | 商品名 |
| qty_ordered | INT | YES | 注文数量 |
| qty_shipped | INT | YES | 出荷済み数量 |
| qty_invoiced | INT | YES | 請求済み数量 |
| qty_canceled | INT | YES | キャンセル数量 |
| qty_refunded | INT | YES | 返金数量 |
| price | DECIMAL(12,4) | YES | 単価 |
| total | DECIMAL(12,4) | YES | 合計 |
| additional | JSON | YES | 追加情報 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 22. order_addresses

注文の住所情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| order_id | BIGINT | NO | 注文ID（外部キー） |
| address_type | VARCHAR(50) | NO | 住所タイプ（billing/shipping） |
| first_name | VARCHAR(255) | YES | 名 |
| last_name | VARCHAR(255) | YES | 姓 |
| company_name | VARCHAR(255) | YES | 会社名 |
| address1 | TEXT | YES | 住所 |
| city | VARCHAR(255) | YES | 市区町村 |
| state | VARCHAR(100) | YES | 都道府県 |
| country | VARCHAR(100) | YES | 国 |
| postcode | VARCHAR(20) | YES | 郵便番号 |
| phone | VARCHAR(50) | YES | 電話番号 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 23. order_payments

注文の支払い情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| order_id | BIGINT | NO | 注文ID（外部キー） |
| method | VARCHAR(100) | YES | 支払い方法コード |
| method_title | VARCHAR(255) | YES | 支払い方法名 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 24. shipments

出荷情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| order_id | BIGINT | NO | 注文ID（外部キー） |
| track_number | VARCHAR(255) | YES | 追跡番号 |
| carrier_title | VARCHAR(255) | YES | 配送業者名 |
| total_qty | INT | YES | 出荷数量 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 25. shipment_items

出荷商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| shipment_id | BIGINT | NO | 出荷ID（外部キー） |
| order_item_id | BIGINT | YES | 注文商品ID（外部キー） |
| product_id | BIGINT | YES | 商品ID（外部キー） |
| name | VARCHAR(255) | YES | 商品名 |
| sku | VARCHAR(255) | YES | SKU |
| qty | INT | YES | 数量 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 26. invoices

請求書情報を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| order_id | BIGINT | NO | 注文ID（外部キー） |
| grand_total | DECIMAL(12,4) | YES | 総計 |
| sub_total | DECIMAL(12,4) | YES | 小計 |
| tax_amount | DECIMAL(12,4) | YES | 税額 |
| discount_amount | DECIMAL(12,4) | YES | 割引額 |
| shipping_amount | DECIMAL(12,4) | YES | 送料 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 27. invoice_items

請求書商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| invoice_id | BIGINT | NO | 請求書ID（外部キー） |
| order_item_id | BIGINT | YES | 注文商品ID（外部キー） |
| product_id | BIGINT | YES | 商品ID（外部キー） |
| name | VARCHAR(255) | YES | 商品名 |
| sku | VARCHAR(255) | YES | SKU |
| qty | INT | YES | 数量 |
| price | DECIMAL(12,4) | YES | 単価 |
| total | DECIMAL(12,4) | YES | 合計 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 28. reviews

商品レビューを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| customer_id | BIGINT | YES | 顧客ID（外部キー） |
| title | VARCHAR(255) | YES | レビュータイトル |
| rating | INT | NO | 評価（1-5） |
| comment | TEXT | YES | レビューコメント |
| status | VARCHAR(50) | YES | 承認ステータス |
| customer_name | VARCHAR(255) | YES | 顧客名 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 29. wishlists

お気に入りリストを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| customer_id | BIGINT | NO | 顧客ID（外部キー） |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 30. downloadable_products

ダウンロード商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| title | VARCHAR(255) | YES | タイトル |
| price | DECIMAL(12,4) | YES | 価格 |
| url | VARCHAR(255) | YES | ダウンロードURL |
| file | VARCHAR(255) | YES | ファイルパス |
| file_name | VARCHAR(255) | YES | ファイル名 |
| type | VARCHAR(50) | YES | タイプ |
| sample_url | VARCHAR(255) | YES | サンプルURL |
| sample_file | VARCHAR(255) | YES | サンプルファイルパス |
| sample_file_name | VARCHAR(255) | YES | サンプルファイル名 |
| sample_type | VARCHAR(50) | YES | サンプルタイプ |
| sort_order | INT | YES | ソート順 |
| downloads | INT | YES | ダウンロード回数 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 31. bundle_options

バンドル商品オプションを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| type | VARCHAR(50) | YES | オプションタイプ |
| is_required | BOOLEAN | YES | 必須フラグ |
| sort_order | INT | YES | ソート順 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 32. bundle_option_products

バンドルオプション商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| bundle_option_id | BIGINT | NO | バンドルオプションID（外部キー） |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| qty | INT | YES | 数量 |
| is_user_defined | BOOLEAN | YES | ユーザー定義フラグ |
| is_default | BOOLEAN | YES | デフォルトフラグ |
| sort_order | INT | YES | ソート順 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 33. grouped_products

グループ商品を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 親商品ID（外部キー） |
| associated_product_id | BIGINT | NO | 関連商品ID（外部キー） |
| qty | INT | YES | デフォルト数量 |
| sort_order | INT | YES | ソート順 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 34. customer_group_prices

顧客グループ別価格を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| product_id | BIGINT | NO | 商品ID（外部キー） |
| customer_group_id | BIGINT | YES | 顧客グループID（外部キー） |
| qty | INT | YES | 数量閾値 |
| value_type | VARCHAR(50) | YES | 値タイプ |
| value | DECIMAL(12,4) | YES | 価格値 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 35. locales

ロケール（言語）を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| code | VARCHAR(10) | NO | ロケールコード |
| name | VARCHAR(255) | NO | ロケール名 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 36. currencies

通貨を管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| code | VARCHAR(10) | NO | 通貨コード |
| name | VARCHAR(255) | NO | 通貨名 |
| symbol | VARCHAR(10) | YES | 通貨記号 |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

### 37. channels

販売チャネルを管理するテーブルです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | BIGINT | NO | 主キー |
| code | VARCHAR(100) | NO | チャネルコード |
| name | VARCHAR(255) | NO | チャネル名 |
| root_category_id | BIGINT | YES | ルートカテゴリID |
| base_currency_id | BIGINT | YES | 基本通貨ID |
| created_at | TIMESTAMP | YES | 作成日時 |
| updated_at | TIMESTAMP | YES | 更新日時 |

## 備考

### 技術的な補足

1. **データベース管理システム**: Bagistoバックエンドは通常MySQL/MariaDBを使用します。

2. **非正規化テーブル**: `product_flats`テーブルは、パフォーマンス最適化のための非正規化テーブルです。商品のローカライズ情報を効率的に検索できるように設計されています。

3. **多言語対応**: 本システムは多言語対応しており、`locale`カラムを持つテーブルでは言語別のデータを管理しています。

4. **マルチチャネル対応**: `channel`カラムを持つテーブルでは、複数の販売チャネル（例：Web、モバイルアプリ）に対応したデータ管理が可能です。

5. **商品タイプ**: `products`テーブルの`type`カラムは以下の値を取ります：
   - `simple`: 単純商品
   - `configurable`: 設定可能商品（バリエーション付き）
   - `bundle`: バンドル商品
   - `grouped`: グループ商品
   - `downloadable`: ダウンロード商品
   - `virtual`: 仮想商品
   - `booking`: 予約商品

6. **価格計算**: 価格関連のカラムは`DECIMAL(12,4)`型を使用し、小数点以下4桁まで対応しています。

### 外部キー関係の概要

- `customers` -> `customer_groups`（多対1）
- `addresses` -> `customers`（多対1）
- `products` -> `attribute_families`（多対1）
- `product_flats` -> `products`（多対1）
- `product_images` -> `products`（多対1）
- `product_inventories` -> `products`, `inventory_sources`（多対1）
- `cart_items` -> `carts`, `products`（多対1）
- `orders` -> `customers`（多対1）
- `order_items` -> `orders`, `products`（多対1）
- `reviews` -> `products`, `customers`（多対1）
- `wishlists` -> `customers`, `products`（多対1）
