コンテンツにスキップ

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_会員管理/)

参照マスターテーブル(外部キーなし)

テーブル名 説明 用途 リンク
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: 初版作成