データの正規化とは,データの重複をなくすことにより,データの管理を容易にしたり,データを多様な目的に用いるのに有効な方法で,データベースの構築の基本になる技法です。ここでは,正規化されていないファイルを,第1正規化,第2正規化,第3正規化する手順を理解します。
正規化,非正規形,第1正規化,第2正規化,第3正規化
★ 参考動画:メディアリンク「ビジネスパーソンIT道場」
過去問題:「データの正規化」( seikika.html)
「ファイルの概念」で,マスタファイルに分解するメリットを学習しましたが,そこでは,どのような基準で設定するかは説明しませんでした。その基準にデータの正規化とERモデルがありますが,ここでは,データ正規化の手順を理解します。
前章であげた売上伝票の形式では,次のように1枚の伝票に3つの商品を連記することができました。

これをそのままファイルにすると,図の「非正規形」のようになります(ここでは,図を単純にするかめに,商品区分や単価を省略しています)。伝票に記載された商品数が少ないときは,レコードの右側に空白がならび無駄になってしまいます。
第1正規化とは,繰り返しの部分を複数のレコードにして,繰り返しを排除する操作です。第1正規化をした結果を第1正規形といいます。
第1正規形のファイルが次のようであるとします。
売上ファイル1=年月日 +得意先コード+得意先名 +商品コード+商品名 +商品区分コード+商品区分名 +数量+単価

このとき,年月日,得意先コード,商品コードのすべてが定まると,そのレコードが決まります。そのとき,これらを主キーといいます。得意先コードが定まると得意先名が定まるというように,ある属性(項目)が定まると他の属性が定まるという関係を関数従属といいます。そして,数量は年月日,得意先コード,商品コードのすべての主キーが定まりますが,このように主キー全体に従属することを完全関数従属といい,得意先コードと得意先名の関係のように,主キーの一部に従属することを部分関数従属といいます。また,商品コードから商品区分コードがわかり,それにより商品区分名がわかるというように,間接的に従属することを推移関数従属といいます。
第2正規化とは,部分関数従属する項目を分離することです。その結果のファイルを第2正規形といいます。主キーは年月日,得意先コード,商品コードですが,他の項目とは次の関係があります。
それで,
得意先マスタ=得意先コード+得意先名
商品マスタ=商品コード+商品名+商品区分コード+商品区分名+単価
が分離されます。残った項目と分離したファイルのユニークキーからなるファイルは,
売上ファイル=年月日+得意先コード+商品コード+数量
となります(ファイル名は任意)。
第3正規化は,主キー以外のキーに関数従属する項目を分離します。その結果を第3正規形といいます。
得意先マスタは,得意先名は主キーである得意先コードに従属しているから完全関数従属であり,売上ファイルでは,数量がすべての主キーに完全関数従属しているので,これ以上は分割できません。
ここでは,商品マスタが対象になります。
商品マスタ=商品コード+商品名+商品区分コード+商品区分名+単価
において,主キー以外のキーとは商品区分コードであり,商品区分コードが決まれば商品区分名が決まるので,
商品区分マスタ=商品区分コード+商品区分名
が分離できます。それで残った項目(分離ファイルの主キーを含む)で,
商品マスタ=商品コード+商品名+商品区分コード+単価
の2ファイルになります。
すなわち,第3正規形のファイル群は,次の4ファイルになります。
売上ファイル=年月日+得意先コード+商品コード+数量
得意先マスタ=得意先コード+得意先名
商品マスタ=商品コード+商品名+商品区分コード+単価
商品区分マスタ=商品区分コード+商品区分名
これは,「ファイルの概念」での結果と同じになります。
なお,データの内容は次のようになります。
正規化の手順を習得するために,いくつかの練習問題をやってみましょう。次の第1正規形のファイルをベースにします(簡単にするために,商品区分を省略しました)。単価は商品により決まり,全得意先で同一とします。
売上ファイル=年月日
+得意先コード+得意先名
+商品コード+商品名
+数量+単価
主キーは,年月日,得意先コード,商品コードです。
このファイルの第3正規形は次のようになります。
得意先マスタ=得意先コード+得意先名
商品マスタ=商品コード+商品名+単価
売上ファイル=年月日+得意先コード+商品コード+数量
図示をすると,次のようになります。

上の例題では,単価はどの得意先についても同一商品同一価格であると仮定していました。それを得意先ごとに単価が違う(同一得意先ではいつも同じ)としたら,第3正規化された結果はどうなりますか。
第2正規化では,主キーのどれかが決まると決まる項目を調べます。
それで,次のものが分離される。
残ったものは,
売上ファイル=年月日+得意先コード+商品コード+数量
となります。
これらのファイルには,主キー以外のキー項目がないので,すでに3次正規化されています。

単価は全得意先で共通とすします。各得意先が複数の店舗を持っており,請求書とは別に店舗別に納入明細書を必要とするとき,次の第1正規形のファイルになります。これを第3正規化しなさい。
売上ファイル=年月日
+得意先コード+得意先名
+店舗コード+店舗名
+商品コード+商品名
+数量+単価
得意先と店舗の関係は,「得意先はいくつかの店舗を持つ」「各店舗はそれぞれ唯一の得意先に属する」関係があります。このとき,得意先と店舗には1:Nの関連があるといい,得意先を親(上位),店舗を子(下位)といいます。得意先よりも店舗のほうが細かいのですから,このファイルの主キーは,年月日,店舗コード,商品コードになります。
第2正規化:部分関数従属の分離
それに従い次の3つのファイルに分解できます。
商品マスタと売上ファイルがこれ以上分解できませんが,店舗マスタはさらに第3正規化により分解できます。
店舗マスタでは,主キーの店舗コード以外にキーとなる項目である得意先コードがあり,それに得意先名が従属していますので,次のように分解できます。

第1問
第1正規化,第2正規化,第3正規化とは,どのような操作をするものであるか。説明しなさい。
第2問
単価が各取引ごとに異なる(金額だけが必要で単価は必要としない)としたら,正規化したファイル群はどうなるでしょうか。
第3問
次の第1正規形のファイルがあります。これを第3正規化しなさい。
履修ファイル=学生番号+学生名 +科目番号+科目名+科目区分+単位 +教員コード+教員名 +成績