テーブル設計の手順
- システムの要件を把握
- テーブルの概要設計(ラフスケッチ)
- テーブルの詳細設計(最終調整)
1. システムの要件を把握
- 設計の第一歩はシステムの要件と機能を明確にする
システムの要件
- AmazonのようなECサイト
機能一覧
- フロント画面
商品検索
商品詳細ページ
マイページ(ログイン、購入履歴) - 管理者画面
ログイン
商品管理
商品カテゴリー管理
2. テーブルの概要設計(ラフスケッチ)
テーブル一覧の洗い出し方
- 機能一覧を見ながらシナリオに沿ってテーブルを洗い出す
| 店舗 テーブル |
商品 カテゴリ テーブル |
商品 テーブル |
ユーザー テーブル |
購入履歴 テーブル |
|---|---|---|---|---|
| 店舗名 | カテゴリ名 | 商品名 | 名前 | 購入日 |
| メールアドレス | 価格 | 住所 | 合計金額 | |
| パスワード | 在庫 | メールアドレス | ||
| パスワード |
3. テーブルの詳細設計(最終調整)
3-1. 日本語を英語に変換
| shops | item_categories | items | users | purchase_histories |
|---|---|---|---|---|
| name | name | name | name | create_at |
| price | address | price | ||
| password | stock | address | ||
| password |
※ 命名規則
- 半角アルファベット、半角数字、アンダーバー
- テーブル名は複数形、カラム名は単数形が基本
- text1,text2のような雑な名前にしない
論理名と物理名
- 論理名 : 日本語の呼び名
- 物理名 : 英語(DBで実際に扱う名前)
予約語
- If
- Null
- Limit
- Date
など
※ 予約語は、テーブル名やカラム名に使用しない
3-2. カラムに型をつける
| shops | item_categories | items | users | purchase_histories |
|---|---|---|---|---|
| id INT | id INT | id INT | id INT | id INT |
| name VARCHAR(255) |
name VARCHAR(255) |
name VARCHAR(255) |
name VARCHAR(128) |
price INT |
| mail VARCHAR(128) |
create_at DATETIME | price INT |
address VARCHAR(255) |
create_at DATETIME |
| password VARCHAR(255) |
updated_at DATETIME | stock INT |
mail VARCHAR(255) |
updated_at DATETIME |
| create_at DATETIME | create_at DATETIME | |||
| updated_at DATETIME | updated_at DATETIME |
VARCHARの桁数
- 2の累乗数
2,4,8,16,32,64,128,256,512... - ただし256だけは255にする
256以上だとインデクスが貼れないから
id / created_at / updated_at
① id(プライマリキー)
- int型 AutoIncreatment
- shop_idのような名前にしない
② created_at / updated_at
- datetime型
- _dateではなく_atと命名
3-3. ER図を書きながら正規化
3-4. 規約条件やインデクスをつける
インデクス
- 検索のキーになるカラムにつける
- 主キーや外部キーにはつけない ⇨ 自動でつく
制約
- NOT NULL制約
- ユニークキー制約
- 外部キー制約