EC-SPOKE 会員管理系データベース定義
概要
会員管理に関連するテーブル定義です。ECCUBEの優れた設計を参考にしつつ、シンプルで正規化された設計となっています。
設計方針
ECCUBEからの改善点
- 住所設計: 世界共通フォーマット(country_id, postal_code, state_province, address_line1-3)で全世界対応
- 購買情報: usersテーブルに持たず、Orderテーブルから動的に集計
- ポイント管理: 履歴テーブルで管理し、残高は集計で算出
- 配送先管理: 注文時のスナップショット(addresses)と会員の登録配送先(customer_addresses)を分離
住所設計: シンプル正規化方式
5つのフィールドで全世界対応
- country_id (FK): 国
- postal_code: 郵便番号/ZIP
- state_province: 州/省/都道府県
- address_line1: 住所1
- address_line2: 住所2
- address_line3: 住所3(オプショナル)
メリット
- シンプルで理解しやすい
- どの国でも対応可能
- 検索・ソートが高速
- JSON不要で保守性が高い
日本の例
- country_id: 日本
- postal_code: 554-0001
- state_province: 大阪府
- address_line1: 大阪市此花区高見1-2-3
- address_line2: ○○マンション101号
アメリカの例
- country_id: USA
- postal_code: 10001
- state_province: NY
- address_line1: 123 Main Street
- address_line2: Apt 4B
- address_line3: New York
テーブル一覧
会員管理系(02_会員管理/)
- users - 会員マスター
- customer_addresses - 会員配送先住所
- point_histories - ポイント履歴
参照マスターテーブル(外部キーなし)
| テーブル名 | 説明 | 用途 | リンク |
|---|---|---|---|
| genders | 性別マスター | 会員の性別管理 | マスター/genders.md |
| job_masters | 職業マスター | 会員の職業管理 | マスター/jobs.md |
| countries | 国マスター | 住所の国管理 | マスター/countries.md |
購買情報の集計
購買関連情報はusersテーブルに持たず、Orderテーブルから動的に集計:
- 購入回数:
COUNT(orders) - 購入総額:
SUM(orders.grand_total) - 初回購入日:
MIN(orders.created_at) - 最終購入日:
MAX(orders.created_at)
ポイント管理
ポイント残高はusersテーブルに持たず、point_historiesテーブルで履歴管理し、残高は集計で算出。
ポイント残高計算
SELECT
SUM(CASE
WHEN point_type = 'add' THEN points
WHEN point_type IN ('use', 'expire') THEN -points
ELSE 0
END) as balance
FROM point_histories
WHERE user_id = ?
AND (expires_at IS NULL OR expires_at > NOW())
ポイントタイプ
add: 付与(購入時、キャンペーン等)use: 使用(決済時のポイント利用)expire: 失効(有効期限切れ)adjust: 調整(管理者による手動調整)
配送先管理
2つのテーブルで管理
addresses: 注文時のスナップショット住所(既存)- 注文時点での配送先情報を記録
- 会員が後から住所を変更しても注文情報は変わらない
-
order_idに紐づく -
customer_addresses: 会員の登録配送先リスト(新規) - 会員が事前に登録した配送先リスト
- 注文時に選択して
addressesにコピー user_idに紐づくis_defaultフラグでデフォルト配送先を管理
会員ステータス
| 値 | 名称 | 説明 |
|---|---|---|
| provisional | 仮会員 | メール認証前の会員 |
| active | 本会員 | メール認証済みの有効会員 |
| suspended | 停止中 | 一時的に停止された会員 |
| withdrawn | 退会 | 退会した会員 |
設計思想
正規化された住所設計
- 世界共通フォーマットで全世界対応
- JSON不要でシンプル
- 検索・ソートが高速
購買情報の動的集計
- usersテーブルに購買情報を持たない
- Orderテーブルから動的に集計
- データの整合性を保ちやすい
ポイント履歴管理
- ポイント残高は履歴から集計
- 有効期限管理が可能
- 履歴が残るため監査が容易
更新履歴
- 2025-11-11: 初版作成