【データベース】第1正規化~第5正規化、ボイスコッド正規化例

データベーススペシャリストを勉強するにあたって、ボイスコッド正規形、第4正規形、第5正規形の理解に苦しんだので、自分なりにまとめておきたいと思います。

第1正規形

まず、非正規形というのは繰り返し項目が含まれているテーブルのことです。

下の表のように、商品番号、商品名などの商品明細部分に複数値が含まれており繰り返し項目になっていることが分かります。

伝票番号商品番号商品名
1S001
S002
F001
消しゴム
鉛筆
パン
2S002
F002
鉛筆
カップ麵
表1.非正規形の例

第1正規形はすべての属性が単一値になっているテーブルのことです。

つまり上記の表から繰り返し項目を削除し以下の表にすればよいことになります。

伝票番号商品番号商品名
1S001消しゴム
1S002鉛筆
1F001パン
2S002鉛筆
2F002カップ麺
表2.第1正規形の例

第2正規形

第2正規形の条件は第1正規形であること、部分関数従属が含まれていないことです。

部分関数従属とは、候補キーの一部から非キー属性が導かれる場合になります。

反対に完全関数従属とは、候補キーすべてから非キー属性が導かれることを言います。

ここで候補キーとは、一行を特定できる最小の組のことです。主キーも候補キーの一つです。

また、非キー属性とは、候補キー以外の属性のことです。

表2の場合だと、候補キーは{伝票番号、商品番号}となりますが、商品名は候補キーの一部である商品番号から導かれてしまいます。

つまり部分関数従属を含んでいます。

部分関数従属を排除すると、以下のようになります。

売上明細のテーブルと商品テーブルに分割することで、部分関数従属をテーブルから排除しました。

伝票番号商品番号
1S001
1S002
1F001
2S002
2F002
表3.1.第2正規形の例1 売上明細テーブル
商品番号商品名
S001消しゴム
S002鉛筆
F001パン
F002カップ麺
表3.2.第2正規形の例2 商品テーブル

ちなみに部分関数従属は、候補キーが複合キーの場合発生するので、候補キーが単一属性なら発生しません。

第3正規形

第3正規形の条件は、第2正規形であり推移的関数従属を含まないことです。

推移的関数従属とは、非キー属性から非キー属性が導かれるということです。

主キーX→非キーY→非キーZと推移的に導かれるので推移的従属ということです。

伝票番号商品番号顧客番号顧客名
1S001C1田中
1S002C1田中
1F001C1田中
2S002C2佐藤
2F002C2佐藤
表4. 第3正規形前の例

例えば、上記のように売上明細の表に、顧客番号と顧客名を含んでいたとします。

主キーは{伝票番号、商品番号}ですが、顧客名は、非キー属性の顧客番号から決定され、
{伝票番号、商品番号}→{顧客番号}→{顧客名}と推移的従属になっています。

推移的関数従属を排除すると、以下のようになります。

売上明細テーブルと顧客テーブルに分割することで、推移的従属がテーブルから排除できました。

伝票番号商品番号
1S001
1S002
1F001
2S002
2F002
表5.1.第3正規形の例1 売上明細テーブル
顧客番号顧客
C1田中
C2佐藤
表5.2.第3正規形の例2 顧客テーブル

ボイスコッド正規形(第3.5正規形)

ボイスコッド正規形とはすべての関係が自明な関数従属性であるか、決定項がスーパーキーとなるテーブルのことです。

ここで自明な関数従属性とは、{伝票番号、商品番号}→伝票番号、{伝票番号、商品番号}→商品番号のように部分集合に対して当たり前に成立する関係のことです。

また、決定項とはX→Yの関係が成立するとき決定する側のXのことです。

スーパーキーとは、一行を特定できる組のことです。極小でなくてよいので候補キーもスーパーキーに含みます。

学生科目講師
田中数学数学太郎
佐藤数学数学次郎
鈴木数学数学次郎
鈴木国語国語花子
表6.第3.5正規形前のテーブル

この表の条件として学生は複数科目を受講でき、講師は1つの科目を担当するが、1つの科目には複数の講師がいるものとします。

表6の場合、主キーは{学生、科目}となりますが、講師は担当する科目が決まっているので
{講師}→{科目}の関係が成立し決定項がスーパーキーでない関係を含んでいます。

これを解消すると、以下のようになります。

受講テーブルと講師テーブルに分割することでボイスコッド正規形とすることができます。

学生科目
田中数学
佐藤数学
鈴木数学
鈴木国語
表7.1.第3.5正規形の例1 受講テーブル
講師科目
数学太郎数学
数学次郎数学
国語花子国語
表7.2.第3.5正規形の例2 講師テーブル

しかしボイスコッド正規形では、分解により一部失われるデータが発生する場合があります。

上記の例だと、{学生、科目}→講師の情報が失われているので田中が数学を数学太郎か数学次郎のどちらの講師から受講していたのか分からなくなってしまっています。

第4正規形

第4正規形とは、ボイスコッド正規形であり複数の多値従属性を含まないテーブルのことです。

ここで多値従属性とは、属性Xが1つ決まれば、属性Yが1つ以上決まる性質のことです。

社員趣味資格
田中映画鑑賞基本情報
田中映画鑑賞応用情報
田中読書基本情報
田中読書応用情報
表8.第4正規形前

表8では、{社員、趣味、資格}を主キーとしていますが、{社員}が決まると{趣味}と{資格}の2つの2つの属性がそれぞれ複数決定されることとなります。

複数の多値従属性が存在しているので、これを排除すれば第4正規形となります。

社員趣味
田中映画鑑賞
田中読書
表8.1. 第4正規形 趣味
社員資格
田中基本情報
田中応用情報
表8.2. 第4正規形 資格

第5正規形

第5正規形とは、ボイスコッド正規形であり結合従属性を含まないテーブルのことです。

ここで結合従属性とは、多値従属性が2つに分解できるのに対してそれ以上に分解できる場合のことです。

支店在庫商品メーカー
東京PCA社
東京PCB社
東京エアコンA社
大阪PCA社
表9.第5規形前

表9の場合、{支店}→{在庫商品}、{支店}→{メーカー}、{在庫商品}→{メーカー}と3つの関係を含んでいるので3分解可能になります。

支店在庫商品
東京PC
東京エアコン
大阪PC
表10.1.第5規形 在庫
支店仕入れ先
東京A社
東京B社
大阪A社
表10.2.第5規形 仕入れ先
商品メーカー
PCA社
PCB社
エアコンA社
表9.第5規形 メーカー

このように分解することで、これ以上複数個の関係に分解できないので第5正規形となります。

まとめ

今回は、第1正規化~第5正規化の例をまとめました。

正直、ボイスコッド正規形、第4正規形、第5正規形は初めて知りましたがあまり業務での使用頻度は多くなさそうです。

参考文献

データベーススペシャリスト2020年版 ITのプロ46著 翔泳社

コメント

タイトルとURLをコピーしました