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は商品、カテゴリ、顧客、注文、決済を扱う基盤スキーマを提供します。在庫管理、レビュー、ウィッシュリスト、配送追跡で拡張できます。