サンプルショップデータベース
レッスンの例題はすべて、顧客、商品カタログ、注文、従業員を含むこのショップデータベースで実行します。約5万行あるため、グループ化やインデックスの動きも実データに近い形で確認できます。
クエリを書いていてテーブル名や列名を確かめたいときは、このページを参照してください。
以下の内容はデータベースファイルから読み出しているため、アプリで開くサンプルと一致します。
等幅で書かれた列名が、実際に打ち込む名前です。備考欄には、その列についてデータベースが知っていることが並びます。
- 主キー — 行を特定する値です。重複せず、空にもなりません。
- 必須 — 空にできない列(NOT NULL)です。この印がない列は NULL を持てます。NULL は絞り込みのレッスンで扱います。
- → テーブル.列 — 外部キーです。その列は別のテーブルの値を持ちます。結合はこれをたどります。
- 一意 — 同じ値を持つ行が2つあってはいけない列です。upsert はここで衝突を検出します。
- インデックスあり — データベースがこの列の並び替え済みのコピーを持っているので、絞り込みや並べ替えが速くなります。最後のレッスンで詳しく説明します。
商品カタログ
categories 33 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
name | TEXT | 必須, 一意 |
description | TEXT | |
parent_id | INTEGER | → categories.id, インデックスあり |
sort_order | INTEGER | 必須, 既定値 0 |
is_active | INTEGER | 必須, 既定値 1 |
products 400 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
category_id | INTEGER | → categories.id, 必須, インデックスあり |
name | TEXT | 必須 |
description | TEXT | |
sku | TEXT | 必須, 一意 |
price | REAL | 必須, インデックスあり, 既定値 0 |
cost | REAL | 必須, 既定値 0 |
stock_quantity | INTEGER | 必須, 既定値 0 |
weight_kg | REAL | |
attributes | TEXT | |
is_active | INTEGER | 必須, 既定値 1 |
created_at | TEXT | 必須 |
updated_at | TEXT | 必須 |
product_images 1,024 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
product_id | INTEGER | → products.id, 必須, インデックスあり |
url | TEXT | 必須 |
alt_text | TEXT | |
sort_order | INTEGER | 必須, 既定値 0 |
is_primary | INTEGER | 必須, 既定値 0 |
tags 15 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
name | TEXT | 必須, 一意 |
product_tags 624 行
| 列 | 型 | 備考 |
|---|---|---|
product_id | INTEGER | 主キー, → products.id |
tag_id | INTEGER | 主キー, → tags.id |
suppliers 12 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
name | TEXT | 必須 |
contact_name | TEXT | |
email | TEXT | |
phone | TEXT | |
country | TEXT | |
rating | REAL | |
is_active | INTEGER | 必須, 既定値 1 |
product_suppliers 579 行
| 列 | 型 | 備考 |
|---|---|---|
product_id | INTEGER | 主キー, → products.id |
supplier_id | INTEGER | 主キー, → suppliers.id |
supplier_sku | TEXT | |
unit_cost | REAL | 必須 |
lead_time_days | INTEGER | 必須, 既定値 7 |
inventory_logs 11,547 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
product_id | INTEGER | → products.id, 必須, インデックスあり |
change_qty | INTEGER | 必須 |
reason | TEXT | 必須 |
reference | TEXT | |
employee_id | INTEGER | → employees.id |
logged_at | TEXT | 必須, インデックスあり |
顧客
customers 1,500 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
first_name | TEXT | 必須, インデックスあり |
last_name | TEXT | 必須, インデックスあり |
email | TEXT | 必須, 一意 |
phone | TEXT | |
birth_date | TEXT | |
country | TEXT | 必須, インデックスあり, 既定値 'US' |
marketing_opt_in | INTEGER | 必須, 既定値 0 |
loyalty_points | INTEGER | 必須, 既定値 0 |
created_at | TEXT | 必須 |
updated_at | TEXT | 必須 |
addresses 1,959 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
customer_id | INTEGER | → customers.id, 必須, インデックスあり |
label | TEXT | 必須, 既定値 'home' |
line1 | TEXT | 必須 |
line2 | TEXT | |
city | TEXT | 必須 |
postal_code | TEXT | |
country | TEXT | 必須 |
is_default | INTEGER | 必須, 既定値 0 |
wishlists 2,493 行
| 列 | 型 | 備考 |
|---|---|---|
customer_id | INTEGER | 主キー, → customers.id |
product_id | INTEGER | 主キー, → products.id |
added_at | TEXT | 必須 |
reviews 2,992 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
product_id | INTEGER | → products.id, 必須, 一意 |
customer_id | INTEGER | → customers.id, 必須, 一意 |
rating | INTEGER | 必須 |
title | TEXT | |
body | TEXT | |
is_verified | INTEGER | 必須, 既定値 0 |
helpful_votes | INTEGER | 必須, 既定値 0 |
created_at | TEXT | 必須 |
notifications 3,000 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
customer_id | INTEGER | → customers.id, 必須, インデックスあり |
type | TEXT | 必須 |
title | TEXT | 必須 |
body | TEXT | |
is_read | INTEGER | 必須, インデックスあり, 既定値 0 |
created_at | TEXT | 必須 |
注文
orders 4,000 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
order_number | TEXT | 必須, 一意 |
customer_id | INTEGER | → customers.id, 必須, インデックスあり |
address_id | INTEGER | → addresses.id |
shipping_method_id | INTEGER | → shipping_methods.id |
coupon_id | INTEGER | → coupons.id |
status | TEXT | 必須, インデックスあり |
subtotal | REAL | 必須, 既定値 0 |
discount | REAL | 必須, 既定値 0 |
shipping_cost | REAL | 必須, 既定値 0 |
total | REAL | 必須, 既定値 0 |
notes | TEXT | |
ordered_at | TEXT | 必須, インデックスあり |
updated_at | TEXT | 必須 |
order_items 12,091 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
order_id | INTEGER | → orders.id, 必須, 一意 |
product_id | INTEGER | → products.id, 必須, 一意 |
quantity | INTEGER | 必須 |
unit_price | REAL | 必須 |
payments 3,651 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
order_id | INTEGER | → orders.id, 必須, インデックスあり |
method | TEXT | 必須 |
amount | REAL | 必須 |
currency | TEXT | 必須, 既定値 'USD' |
status | TEXT | 必須 |
transaction_ref | TEXT | |
paid_at | TEXT |
shipments 2,319 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
order_id | INTEGER | → orders.id, 必須, インデックスあり |
carrier | TEXT | 必須 |
tracking_number | TEXT | |
shipped_at | TEXT | |
delivered_at | TEXT |
shipping_methods 5 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
name | TEXT | 必須, 一意 |
base_cost | REAL | 必須 |
est_days | INTEGER | 必須 |
is_active | INTEGER | 必須, 既定値 1 |
coupons 10 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
code | TEXT | 必須, 一意 |
discount_type | TEXT | 必須 |
discount_value | REAL | 必須 |
min_order | REAL | 必須, 既定値 0 |
starts_at | TEXT | 必須 |
ends_at | TEXT | 必須 |
max_uses | INTEGER | |
used_count | INTEGER | 必須, 既定値 0 |
従業員
departments 10 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
name | TEXT | 必須, 一意 |
description | TEXT | |
created_at | TEXT | 必須 |
employees 120 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
department_id | INTEGER | → departments.id, 必須, インデックスあり |
manager_id | INTEGER | → employees.id, インデックスあり |
first_name | TEXT | 必須 |
last_name | TEXT | 必須 |
email | TEXT | 必須, 一意 |
phone | TEXT | |
hire_date | TEXT | 必須 |
salary | REAL | 必須, 既定値 0 |
position | TEXT | |
is_active | INTEGER | 必須, 既定値 1 |
audit_logs 2,000 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | 主キー |
employee_id | INTEGER | → employees.id |
action | TEXT | 必須 |
table_name | TEXT | 必須, インデックスあり |
record_id | INTEGER | インデックスあり |
old_values | TEXT | |
new_values | TEXT | |
ip_address | TEXT | |
created_at | TEXT | 必須 |
設定
settings 8 行
| 列 | 型 | 備考 |
|---|---|---|
key | TEXT | 主キー |
value | TEXT | 必須 |
description | TEXT | |
updated_at | TEXT | 必須 |
ビュー
ビューは保存されたクエリで、テーブルのようにふるまいます。SELECT できますが、ビュー自身の行がどこかに保存されているわけではありません。次の4つは上のテーブルを要約したものです。
v_customer_lifetime 1,500 行
| 列 | 型 | 備考 |
|---|---|---|
customer_id | INTEGER | |
customer | TEXT | |
country | TEXT | |
orders | TEXT | |
revenue | TEXT | |
first_order | TEXT | |
last_order | TEXT |
v_low_stock 44 行
| 列 | 型 | 備考 |
|---|---|---|
id | INTEGER | |
sku | TEXT | |
name | TEXT | |
stock_quantity | INTEGER | |
category | TEXT |
v_order_summary 4,000 行
| 列 | 型 | 備考 |
|---|---|---|
order_id | INTEGER | |
order_number | TEXT | |
status | TEXT | |
ordered_at | TEXT | |
customer | TEXT | |
country | TEXT | |
items | TEXT | |
total | REAL |
v_product_sales 400 行
| 列 | 型 | 備考 |
|---|---|---|
product_id | INTEGER | |
name | TEXT | |
sku | TEXT | |
category | TEXT | |
units_sold | TEXT | |
revenue | TEXT | |
avg_rating | TEXT | |
review_count | TEXT |