初めてのDB設計
プログラミングを勉強し始めて約2週間、ついに(ポートフォリオ)アプリの個人開発に足を踏み入れました。開発のスタートであるDB設計について得た知識を簡単に記事にしていこうと思います。今回はDB設計の流れをまとめました。
DB設計手順
1. 要件定義から始める
これから作成するデータベースで、「どんなデータをどう管理していくか」を決めていきます。そのためには、データベースを使用するシーンの流れを詳細に分析し、要件を抽出していきます。
2. エンティティを抽出する
エンティティとはデータベース内の各カテゴリのことで、例えばECサイトアプリでは「商品」「顧客」「注文」などがエンティティに当たります。
要件定義での内容から、データを持ちそうなカテゴリ(エンティティ)を抽出していきます。
3. 属性(カラム)を決める
属性(カラム)とは「エンティティが持つ詳細な情報の項目」のことです。先のECサイトアプリを例に取ると、
-
【商品】エンティティのカラム
「商品名」「価格」「在庫数」…など -
【顧客】エンティティのカラム
「氏名」「メールアドレス」「パスワード」…など
抽出した各エンティティに必要な情報(カラム)を与えていきます。
4. リレーションの設定
リレーションは各エンティティ間に存在する「関係性」のことです。テーブル同士がどんな関係性であるかを明確にしていきます。
リレーションの種類には以下のものがあります。
①1対1
一方のデータに対して、もう一方も「ちょうど1つだけ」存在します。(あまり使われないらしい…)
例えば、【ユーザー】と【プロフィール】の関係は1対1の関係となります。
②1対多
1つのエンティティが複数のデータを持ちます。
【ユーザー】と【注文】の関係においては、1つの【ユーザー】に対して複数の【注文】データが存在できるため、1対多の関係になります。
③多対多
お互いのエンティティが複数の関係を保つ場合に発生します。一般的に「中間テーブル」を用いて1対多の関係をつなげることで表現します。
例えば【注文】と【商品】の関係において、1つの【注文】に対して複数の【商品】が存在し、1つの【商品】は複数の【注文】に含まれるため、多対多と表現します。
※以下の【注文詳細】は中間テーブルです。
5. 正規化してデータを整理する
正規化とはデータの重複や不整合を防ぐために、データを分割して整理すること。
一般的には以下の手順で正規化していきます。
①第1正規化
②第2正規化
複合キーの一部にしか依存していないカラムを、別テーブルに分けます。

※上表での複合キーは【注文番号】と【商品番号】
③第3正規化
主キー以外のカラムに他のカラムが依存していた場合は、別テーブルに分けます。

※上表での主キーは【注文番号】
6. ER図を作成する
ここまでに整理してきた「エンティティ」「カラム」「リレーション」をER図にしてまとめます。
7. SQLテーブルの定義
実際のデータベース構造をSQLテーブルとして定義します。
例えば【商品】テーブルを定義すると以下のようなSQL文を記述します。
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
description TEXT,
category TEXT,
price INTEGER,
image_url TEXT
);
- 「PRIMARY KEY」は主キーを表します。
- 「NOT NULL」は空欄禁止の制約です。
最後に
本記事では一般的なDB設計の流れに沿ってまとめました。かなり基礎の部類のため、実際に設計を進めていきながら+αを学んでいきたいと思います。
