ECサイトデータベースのERD設計

ECシステムの完全なERD。products、categories、customers、orders、order_items、payments、inventoryを適切なリレーションシップと制約で解説します。

Best Practices

詳細な説明

ECスキーマの設計

ECデータベースは最も一般的に設計されるスキーマの1つです。商品、顧客、注文、決済、それらの相互接続を含みます。このERDは機能するオンラインストアに必要な基本エンティティをカバーします。

コアエンティティ

商品とカテゴリ(M:N)

CREATE TABLE categories (
  id SERIAL PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  parent_id INT,
  FOREIGN KEY (parent_id) REFERENCES categories(id)
);

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  description TEXT,
  price DECIMAL(10,2) NOT NULL,
  sku VARCHAR(100) UNIQUE,
  is_active BOOLEAN NOT NULL DEFAULT true
);

CREATE TABLE product_categories (
  product_id INT NOT NULL,
  category_id INT NOT NULL,
  PRIMARY KEY (product_id, category_id),
  FOREIGN KEY (product_id) REFERENCES products(id),
  FOREIGN KEY (category_id) REFERENCES categories(id)
);

顧客と注文(1:N)

CREATE TABLE customers (
  id SERIAL PRIMARY KEY,
  email VARCHAR(320) NOT NULL UNIQUE,
  first_name VARCHAR(100),
  last_name VARCHAR(100),
  created_at TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE TABLE orders (
  id SERIAL PRIMARY KEY,
  customer_id INT NOT NULL,
  status VARCHAR(50) NOT NULL DEFAULT 'pending',
  total DECIMAL(12,2) NOT NULL,
  shipping_address TEXT NOT NULL,
  ordered_at TIMESTAMP NOT NULL DEFAULT NOW(),
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);

注文明細(ordersとproductsの結合)

CREATE TABLE order_items (
  id SERIAL PRIMARY KEY,
  order_id INT NOT NULL,
  product_id INT NOT NULL,
  quantity INT NOT NULL,
  unit_price DECIMAL(10,2) NOT NULL,
  FOREIGN KEY (order_id) REFERENCES orders(id),
  FOREIGN KEY (product_id) REFERENCES products(id)
);

決済(ordersと1:1)

CREATE TABLE payments (
  id SERIAL PRIMARY KEY,
  order_id INT NOT NULL UNIQUE,
  method VARCHAR(50) NOT NULL,
  amount DECIMAL(12,2) NOT NULL,
  status VARCHAR(50) NOT NULL DEFAULT 'pending',
  paid_at TIMESTAMP,
  FOREIGN KEY (order_id) REFERENCES orders(id)
);

リレーションシップマップ

リレーションシップ タイプ 実装
customers → orders 1:N orders.customer_id
orders → order_items 1:N order_items.order_id
products → order_items 1:N order_items.product_id
products ↔ categories M:N product_categories結合テーブル
categories → categories 自己参照 categories.parent_id
orders → payments 1:1 payments.order_id UNIQUE

設計上の判断

  • order_itemsの価格: 購入時の価格を保存(現在の商品価格への参照ではない)
  • 自己参照カテゴリ: 無制限のネストが可能(Electronics → Laptops → Gaming Laptops)
  • 別テーブルの決済: 複数の決済試行と異なる決済方法に対応

ユースケース

オンラインストアやマーケットプレイスを構築している場合。このERDは商品、カテゴリ、顧客、注文、決済を扱う基盤スキーマを提供します。在庫管理、レビュー、ウィッシュリスト、配送追跡で拡張できます。

試してみる — ERD Editor

フルツールを開く