データベース設計について
書籍でデータベース設計について学習したのでまとめてみたいと思います。
本当に基礎中の基礎のことしかまとめないので、何の参考にもならないと思いますが、自分の頭を整理するために。。
データベース設計の3つの手順
データベースやテーブルの設計は以下3つの手順を経て行います。
概念設計
管理すべき情報はどうのようなものかを整理する。システムに関する事は考えず、要件に登場する情報だけを把握する。
情報間で関連がある場合(リレーション)、どのような関係があるかも整理する。ER図もこの段階で作成する
概念設計では、情報を整理するために以下の3つの言葉が使用される
- エンティティ...テーブルのようなもの
- 属性...テーブルの列のようなもの
- 関連...リレーションのようなもの
エンティティを導き出す方法
- 候補となる用語を洗い出す
- 不要な用語を捨てる
- 関連がありそうなものをまとめる
- エンティティ名と属性名に分ける
論理設計
概念設計で整理された各情報について、RDBを使う前提で構造を整理し具体化していく。
論理設計では、どのようなテーブルを作り、それぞれどのような列を作るかまで明らかにすれば良い。
データ型や制約などの部分については考えない。
論理設計では正規化という作業を中心に行っていく。
正規化は矛盾したデータを格納できないよう、テーブルを複数に分割していく作業のこと。
正規化によってテーブルが適切に分割された状態を正規形といい、正規形は非正規形から第5正規形まであるが、システム開発の場合は、第3正規形までで問題ない
第1正規形
テーブルのすべての行のすべての列に1つずつ値が入っている状態。
繰り返し列やセルの結合が現れてはならない。
- 繰り返しの列の部分を別の表に切り出す
- 切り出したテーブルの仮の主キーを決定する
- 主キー列をコピーして復号主キーを構成する
第2正規形
複合主キーを持つテーブルの場合、非キー列は、複合主キー全体の関数従属すべき。
複合主キーの一部の列に対してのみ関数従属する列が含まれてはならない
- 複合主キーの一部に関数従属する列を切り出す
- 部分関数従属先だった列をコピーする。
第3正規形
テーブルの非キー列は主キー列に直接、関数従属するべきである。
主キーに関数従属する列にさらに関数従属する列は存在してはならない。
このような関係を推移関数従属という。
- 関節的に主キーを関数従属する列を切り出す
- 直接関数従属だった列をコピーする
3つの正規化で排除するもの
第1正規形への変形...繰り返し列
第2正規形への変形...複合主キーへの関数従属(部分関数従属)
第3正規形への変形...間接的な関数従属(推移関数従属)
物理設計
特定のDBMS(MySQL、PostgreSQLなど)を使う前提に立ち、論理設計で明らかになった各テーブルについて、その内容を詳しく具体化していく。
データベース設計の最終段階なので、型、インデックス、制約、デフォルト値など、テーブル作成に必要な要素を確定させる。
物理設計に基づいて、CRRATE TABLEなど、一連のDDL文を作成し、データベースを作成していくことになる。
物理設計に必要な手順
- 最終的なテーブル名、列名を決定する
- 列の型を決定する
- 制約、デフォルト値を決定する
- インデックスを決定する
データベースの設計についてまとめてみました。
エンジニアなら誰でも知っていることだと思いますが、改めて書籍で学習すると、知識が定着したような気がします。
Author And Source
この問題について(データベース設計について), 我々は、より多くの情報をここで見つけました https://qiita.com/jun__tech/items/d6471a04566f7cd1d3ab著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .