1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

データベース設計について

Posted at

書籍でデータベース設計について学習したのでまとめてみたいと思います。
本当に基礎中の基礎のことしかまとめないので、何の参考にもならないと思いますが、自分の頭を整理するために。。

データベース設計の3つの手順

データベースやテーブルの設計は以下3つの手順を経て行います。

概念設計

管理すべき情報はどうのようなものかを整理する。システムに関する事は考えず、要件に登場する情報だけを把握する。
情報間で関連がある場合(リレーション)、どのような関係があるかも整理する。ER図もこの段階で作成する
概念設計では、情報を整理するために以下の3つの言葉が使用される

  • エンティティ...テーブルのようなもの
  • 属性...テーブルの列のようなもの
  • 関連...リレーションのようなもの

エンティティを導き出す方法

  • 候補となる用語を洗い出す
  • 不要な用語を捨てる
  • 関連がありそうなものをまとめる
  • エンティティ名と属性名に分ける

論理設計

概念設計で整理された各情報について、RDBを使う前提で構造を整理し具体化していく。
論理設計では、どのようなテーブルを作り、それぞれどのような列を作るかまで明らかにすれば良い。
データ型や制約などの部分については考えない。
論理設計では正規化という作業を中心に行っていく。
正規化は矛盾したデータを格納できないよう、テーブルを複数に分割していく作業のこと。
正規化によってテーブルが適切に分割された状態を正規形といい、正規形は非正規形から第5正規形まであるが、システム開発の場合は、第3正規形までで問題ない

第1正規形

テーブルのすべての行のすべての列に1つずつ値が入っている状態。
繰り返し列やセルの結合が現れてはならない。

  • 繰り返しの列の部分を別の表に切り出す
  • 切り出したテーブルの仮の主キーを決定する
  • 主キー列をコピーして復号主キーを構成する

第2正規形

複合主キーを持つテーブルの場合、非キー列は、複合主キー全体の関数従属すべき。
複合主キーの一部の列に対してのみ関数従属する列が含まれてはならない

  • 複合主キーの一部に関数従属する列を切り出す
  • 部分関数従属先だった列をコピーする。

第3正規形

テーブルの非キー列は主キー列に直接、関数従属するべきである。
主キーに関数従属する列にさらに関数従属する列は存在してはならない。
このような関係を推移関数従属という。

  • 関節的に主キーを関数従属する列を切り出す
  • 直接関数従属だった列をコピーする

3つの正規化で排除するもの
第1正規形への変形...繰り返し列
第2正規形への変形...複合主キーへの関数従属(部分関数従属)
第3正規形への変形...間接的な関数従属(推移関数従属)

物理設計

特定のDBMS(MySQL、PostgreSQLなど)を使う前提に立ち、論理設計で明らかになった各テーブルについて、その内容を詳しく具体化していく。
データベース設計の最終段階なので、型、インデックス、制約、デフォルト値など、テーブル作成に必要な要素を確定させる。
物理設計に基づいて、CRRATE TABLEなど、一連のDDL文を作成し、データベースを作成していくことになる。

物理設計に必要な手順

  • 最終的なテーブル名、列名を決定する
  • 列の型を決定する
  • 制約、デフォルト値を決定する
  • インデックスを決定する

データベースの設計についてまとめてみました。
エンジニアなら誰でも知っていることだと思いますが、改めて書籍で学習すると、知識が定着したような気がします。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?