論理設計と正規化
論理設計の4ステップ
エンティティの抽出
エンティティの定義
正規化
ER図の作成
エンティティの抽出・定義
エンティティとは、日本語で「実体」という意味にあたります。
具体的には、物理的実体を伴うものだと顧客・社員・店舗といったものや、
概念としてしか存在しない注文・予約などが挙げられます。
RDBにおいては、テーブルの名前になるものにあたります。
エンティティの抽出
エンティティの抽出とは、実現したいシステムで、どんなエンティティを管理する必要があるか洗い出すプロセスのことをいいます。
(例)本の予約管理システム
→書籍・予約・予約者などのエンティティ
エンティティの定義
エンティティの定義とは、各エンティティがどのような属性(データ)を保持するかを決めるプロセスのことをいいます。
各テーブルがどんなカラムを持つのか定義します。
テーブルとは
テーブルとは、共通点を持ったレコードの集合のことをいいます。
テーブル名はすべて複数形/ 複数名詞で表します。
テーブルの構成要素
行と列
キー
制約
❏ 行と列
「行(レコード)」と「列(カラム)」と呼びます。
❏ キー
キーとは、ある特定のデータを引き出すための鍵となる列のことです。
表にはなくてもいいですが、テーブルにはなくてはならないものです。
主キーと外部キーがあります。
主キー(プライマリーキー):その値をしていすれば必ず一行のレコードを特定できるような列
外部キー:2つのテーブル間の列同士の関連性を設定するもの
❏ 制約
参照整合性制約のように、テーブルには制約をつけることが出来ます。
他の代表的な制約としてNOT NULL制約があります。
NOT NULL制約とは、
→NULLを禁止する制約のことで、
NULLとは「フィールドにデータが入っていない状態のこと」を指します。
正規化
正規化とは、システムでの利用がスムーズに行えるようにエンティティを整理するプロセスのことをいいます。
リレーショナルデータベースにおけるエンティティの整理は、正規化に整えることを指しています。
正規形とは
→データベースにおいて保持するデータの重複が排除されたデータ形式のことです。
データの重複(冗長性)があると、無駄なデータ領域と面倒な更新処理を発生させてしまいます。
正規形には第1〜第5正規形までが存在します。
業務では第3正規形まで考えることが多いです。
第一正規化
第一正規化とは、「一つのフィールドには1つの値しか含まない」という原則が守られている状態ことを指します。
Q . なぜ1つのフィールドに複数の値を入れてはダメなのか?
→複数の値を許すと、主キーが各列の値を一意に定める事ができなくなるからです。
→主キーの定義に反します。
関数従属性
xの値を一つ決めれば、yの値が1つに決まる関係性のことを関係従属性と呼びます。
「yはxに従属する」のことを指しています。
まとめると、
正規化とは、「テーブルのすべての列が関数従属性を満たすように整理していくこと」であり、{x}→{y}に当たります。
第2正規形
部分関数従属が解消されていて、完全関数従属のみのテーブルになっている形です。
部分関数従属とは
→複数列からなる主キーの一部の列に対して従属する列がある状態。
完全関数従属は
→主キーを構成するすべての列に対して従属性がある状態。
Q. なぜ部分関数従属が良くないのか
→値の更新の手間が増えてしまうからです。
第3正規形
推移的関数従属が解消されている形です。
推移的関数従属
推移的関数従属とは、2段階の関数従属がある状態のことをいいます。
まとめ
正規化とは、テーブルのすべての列が関係従属性も満たすように整理することにより、データの冗長性を排除するプロセスのこと。
第1正規形では、1つのフィールドには1つの値が、
第2正規形では、部分関係従属の解消、
第3正規形では、推移的関数従属の解消を行っている
正規化したテーブルはJOINによる結合で正規化の前の状態に戻せる。
このことを無損失分解という。
正規化の逆操作は結合という。