
データベース設計ができないと「動くけど壊れやすいアプリ」になる
データベース設計ができないと「動くけど壊れやすいアプリ」になる
プログラミング学習では、
設計が
データベース設計の基本概念
テーブルとは
データベースでは、
- 行(レコード) — 1つの
データ (例:1人の ユーザー情報) - 列(カラム) — データの
属性 (例:名前、 メールアドレス、 年齢)
主キー(Primary Key)
各レコードをidという
- 同じ
値が 2つ 存在して はいけない - NULLであって
はいけない - 一度決めたら
変更しない
外部キー(Foreign Key)
テーブル同士をuser_idを持たせる
テーブル設計の3つのステップ
ステップ1:必要なデータを洗い出す
まず、
たとえば、ECサイトなら:
- ユーザー情報
(名前、 メール、 パスワード、 住所) - 商品情報
(名前、 価格、 説明、 在庫数、 カテゴリ) - 注文情報
(注文日、 合計金額、 配送先) - 注文明細
(商品、 数量、 単価)
ステップ2:テーブルに分割する
洗い出した
| テーブル名 | 主な列 |
|---|---|
| users | id, name, email, password_hash, address |
| products | id, name, price, description, stock, category_id |
| categories | id, name |
| orders | id, user_id, total_amount, shipping_address, created_at |
| order_items | id, order_id, product_id, quantity, unit_price |
ステップ3:リレーションを定義する
テーブル同士の
- 1対多 — 1人の
ユーザーが 複数の 注文を 持つ (users → orders) - 多対多 — 1つの
注文に 複数の 商品、1つの 商品が 複数の 注文に 含まれる (orders ↔ products、order_itemsで 中間テーブルを 使う) - 1対1 — 1人の
ユーザーに 1つの プロフィール (users → profiles)
データベース設計を
正規化の基本
正規化とは、データの
よくある悪い設計の例
商品テーブルに
| id | name | category_name |
|---|---|---|
| 1 | Tシャツ | トップス |
| 2 | パーカー | トップス |
| 3 | デニム | ボトムス |
この
- 「トップス」を
「アウター」に 変更したい とき、 すべての 行を 更新する 必要がある - カテゴリ名の
表記揺れ( 「トップス」「トップ」)が 発生する 可能性がある
正規化後の設計
categoriesテーブルを
- データの
更新は 1箇所で 済む - 表記揺れが
発生しない - カテゴリに
追加情報 (説明、 画像など)を 持たせやすい
未経験エンジニアがやりがちな設計ミス
1. なんでも1つのテーブルに詰め込む
ユーザー情報、
2. カラム名が曖昧
data、info、valueなど、user_name、order_date、total_priceのように具体的な
3. 削除フラグを使いすぎる
物理削除をis_deletedフラグをWHERE is_deleted = falseを書く
データベース設計は「考える力」の訓練
データベース設計は、
ゆめさくエンジニアの
API設計の
フロントと
要件定義から
仕様書を
現場で
スクールでは
ゆめさくエンジニアの
18ヶ月で




