[DB設計]概念設計、論理設計、物理設計の違い
システムを開発する時に必要となるデータベース設計ですが、設計の手順についてよく分かってないところがあったのでまとめました。
概念設計
最初に行うのが概念設計です。
この工程ではシステムで扱う情報の全体像を整理し、現実に存在するデータの意味と関係性を明確にします。
まずデータ分析をし、対象となる業務でどんなデータが必要かを洗い出します。例えば、
- どんな情報を持つべきか
- どの粒度で管理すべきか
- 何を1件として扱うのか
みたいなことを考えます。
そしてそのデータの意味と関連を分析、整理し、あいまいな用語などがあれば命名規約などを使ってデータ項目の標準化を行います。重複や矛盾のあるデータを排除し、管理対象を整理したうえで概念データモデルを作成します。
概念データモデルはER図やUMLのクラス図などを使って対象となるデータのエンティティ、属性、関係性を表現します。
この段階では、データの整合性を保つための制約などは考慮せずに、必要な情報の構造を漏れなく把握することに重点を置きます。
簡単にまとめ
- 概念設計はデータの全体像を把握するための設計
- 必要なデータの構造を明確にすることが重要
論理設計
概念設計の次に行うのが論理設計です。
論理設計では実在するデータベースを意識して論理データモデルを作成します。
例えば関係データベースの場合だと概念設計で作成したデータ項目を、どの表の属性として管理するかを決定するテーブル設計を行います。
この時、各テーブルの主キー及び外部キーについても考えます
- 主キー
- その値を指定すれば一意のレコードを特定できるキーのこと
- 外部キー
- 他のテーブルの主キーを参照するためのキーのこと
- 外部キーには参照するテーブルの主キーに同じ値をもつレコードが存在しなければならない参照制約を設定することができる
また、テーブル設計を行うときは必要な項目をテーブルに列挙した非正規形の状態から、正規化を行い冗長性を排除し、データの整合性を保つ設計を行います。
正規化手順
- 第一正規形
- 一つのセルに一つの値(スカラ値)しか含まない状態にする
- 第二正規形
- 主キーの一部の列だけで従属する列(部分関数従属)を別のテーブルに分割する
- 第三正規形
- 主キー以外の列(非キー)が他の非キーに関数従属している列(推移的関数従属)を別のテーブルに分割する
- 例えばA列(主キー)によってB列(非キー)が決まり、B列(非キー)によってC列(非キー)が決まる状態だと、C列がA列に推移的に関数従属していることになります。
簡単にまとめ
- 論理設計は実際のデータベース構造を設計する段階
- 正規化を通じてデータの整合性と効率的な管理を目指す
物理設計
最後に行うのが物理設計です。
物理設計では実際のデータベース管理システム(DBMS)の特性を考慮して、データベースの物理的な構造を設計します。
各属性に最適となるデータ型を割り当てたり、アクセ効率を向上させるためのインデックスを設定することを検討したりします。
簡単にまとめ
- 物理設計はDBMSの特性を考慮した設計
- データ型の選択やインデックス設計が重要
まとめ
文にすることで設計の流れについてなんとなく整理できました。
特に私は概念設計と論理設計の違いについてよくわかってなかったので、この点は今後しっかり意識していきたいと思います。
設計を進めるうえで大切なのはいきなりテーブルを作るのではなく、まずは最初にデータの全体像を把握し、必要な情報の構造を漏れなく把握することでどんな情報を扱うのかを整理することだと学びました。
今後はまずデータの全体像を整理してから設計を進めるように意識していきたいと思います。
Discussion