3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【データベース】概念設計、論理設計、物理設計って言われてもよくわからんって人へ

3
Posted at

image.png

読むにあたっての前提条件

  • エンティティと言われて何かわかる
  • 属性、カラムといわれて何かわかる

結論:3つのフェーズでやることはこれです

フェーズ やること アウトプット
概念設計 何を管理するか決める 簡易ER図(エンティティと関係性のみ)
論理設計 どう整理するか決める 詳細ER図(属性、主キー、外部キーまで)
物理設計 どう実装するか決める 実装可能な設計書

何はともあれ具体例、ECサイトを例に各フェーズの詳細を見ていきましょう。

概念設計:何を管理するか決める

やること

業務を分析して「何を管理する必要があるか」を洗い出します。
技術的なことは一切考えず、純粋にビジネスの観点で必要なものを整理します。

ECサイトでの具体例

ECサイトで必要なものを考えてみます。
ポイントはソフトウェア上で実現したい業務の上で扱っている情報と向き合うことです。
例えばこんな具合です。

  • 顧客の情報を管理したい
  • 商品の情報を管理したい
  • 注文の情報を管理したい

これらをエンティティ(管理する対象)として抽出し、関係性を整理します。

  • リソースエンティティ
  • イベント(アクション)エンティティ
    をわけて徹底的に洗い出す

ということです。
今回の例だと

  • リソースエンティティ
    • 商品
    • 顧客
  • イベント(アクション)エンティティ
    • 注文

となります。
あとはそれぞれのエンティティが必要な要素を考え、
必要であれば他エンティティと関係性を持つようにER図を作成します。

アウトプット:簡易ER図

この段階ではざっとのつながりでOkです。
「顧客にどんな属性があるか」「顧客IDはどんな型か」といったことは考えません。
あくまで

  • 「何を管理するか」
  • 「エンティティ同士の関係性」
    だけを決めます。

注意: ER図作成にもいくつかの段階があり、

  • 概念ER図
  • 論理ER図
  • 物理ER図
    があります。
    ここで作成したER図は概念ER図に当たります。

個人的には最初のER図作成は概念ER図でざっと管理するエンティティ定義と、それぞれのつながりを可視化し
そのあとにそれぞれのエンティティに対して属性を追加する論理設計(テーブル定義するフェーズ)をし、
属性が固まり次第ER図にも属性を追加し概念ER図→論理ER図に進化させるのが良いです。

論理設計:どう整理するか決める

やること

概念設計で決めた内容を、データベースで管理できる形に変換します。具体的には各エンティティの属性(カラム)を全て洗い出し、主キー、外部キーを定義し、データの整合性を保つルールを決めます。

ECサイトでの具体例

概念設計で決めたエンティティに、属性を追加していきます。

※ PK = 主キー、FK = 外部キー、UK = ユニークキー

アウトプット:テーブル設計&詳細ER図

(上の図例は詳細ER図といった方がベター)

各エンティティの属性、主キー、外部キーが明確になった詳細なER図ができあがります。
これが実質的な「テーブル設計」そのものです。

この段階でも、まだデータ型の具体的なサイズ(VARCHAR(100)など)やインデックスは決めません。

物理設計:どう実装するか決める

やること

論理設計で決めたテーブルを、実際に使うデータベース(MySQLやPostgreSQLなど)で動かせる形にします。パフォーマンスも考慮しながら、データ型のサイズ、インデックス、文字コードなどを決定します。

ECサイトでの具体例

顧客テーブル(実装版)

カラム名 データ型 制約 インデックス
顧客ID INT 主キー、自動採番 あり(主キー)
顧客名 VARCHAR(100) NOT NULL なし
メールアドレス VARCHAR(255) UNIQUE, NOT NULL あり(検索用)
登録日 DATETIME デフォルト値:現在日時 なし

商品テーブル(実装版)

カラム名 データ型 制約 インデックス
商品ID INT 主キー、自動採番 あり(主キー)
商品名 VARCHAR(200) NOT NULL あり(検索用)
価格 INT NOT NULL なし
在庫数 INT NOT NULL なし

注文テーブル(実装版)

カラム名 データ型 制約 インデックス
注文ID INT 主キー、自動採番 あり(主キー)
顧客ID INT 外部キー, NOT NULL あり(結合用)
商品ID INT 外部キー, NOT NULL あり(結合用)
注文日 DATETIME NOT NULL あり(日付検索用)
数量 INT NOT NULL なし

アウトプット:実装可能な設計書、具体的なテーブル

各カラムのデータ型、サイズ、インデックスまで決まった、
すぐにCREATE TABLE文を書ける状態の設計書ができがる状態をイメージしましょう。

まとめ:3つのフェーズの違いを再復習

各フェーズの役割をもう一度整理します。

  • 概念設計:ビジネス視点で「何を管理するか」を決める。エンティティと関係性だけを考える。
  • 論理設計:データベース視点で「どう整理するか」を決める。属性、主キー、外部キーを全て決める。この段階のER図が、多くの人が普段使う「ER図」です。
  • 物理設計:実装視点で「どう実装するか」を決める。パフォーマンスや具体的な製品を考慮する。

この3段階を意識することで、変更に強く、保守しやすいデータベース設計ができるようになります。
最初は混乱するかもしれませんが、「何を→どう→具体的にどう」という流れを意識すれば理解しやすくなるはずです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?