http:www.sip-ac.jp/sip/konan_text/dbm04-03.html,        © 2001 Ayumi Yoshikawa
主観情報処理研究所

データベースマネジメント:正規化(最終更新:2015/12/06 16:33:44 JST)

正規化(その3)

正規化(教科書38ページ)

データベースでもプログラムでも同様のことが言えるが,他人が見て理解できるように設計されていないと後々問題を引き起こす.例えば最初にデータベースの設計を行った人が転勤,退職していなくなると,他の人では修正なども行えないという困った状態になる.このような問題を生じさせないようにする設計方法の一つが正規化(normalize)である.正規化は1つのテーブル内の属性項目の関係をできるだけシンプルにすることで,データモデルを理解しやすくすることと,データ更新を必要最小限のテーブルにとどめることで効率化を図ることが目的である.

[*]下へ▼ ▲[#]上へ

正規化の種類

リレーショナルデータベースの設計は,データモデルを作成することであるが,最初から理想的なデータモデルを作成することは難しい場合も多い.例えば,データベースを利用していない業務にデータベースを導入する場合は,現在利用されている書類などからデータモデルを作成していくことになる.この場合,とりあえず何も考えずに属性項目をテーブル内に並べた状態は非正規形になる.この非正規形をいろいろな規則に従い洗練していく過程が正規化である.正規化にはBoyce-Codd(BC)正規形を含めて次のような6段階がある.

  1. 第1正規形:フィールドの繰り返し構造,主キーの内部構造の解消
  2. 第2正規形:部分関数従属性の解消
  3. 第3正規形:属性項目間の関数従属性の解消
  4. BC正規形:不要な関数従属性の解消
  5. 第4正規形:対称性のある多値従属性の解消
  6. 第5正規形:結合従属性を維持した主キー間の分解

[*]下へ▼ ▲[#]上へ

非正規形(教科書38ページ)

例えば教科書38ページのような売上伝票をデータベースで管理することを考える.商品明細項目が複数あるため繰り返し構造となっている.フィールドに繰り返し構造や内部構造が存在する場合,非正規形(non normal form)であるという.

例えば,次の[レポート]テーブルは非正規形である.

[レポート]
学生番号氏名レポート評価
1回目2回目3回目
1鳥谷敬807585
5平野恵一606560

[*]下へ▼ ▲[#]上へ

第1正規形(教科書39ページ+51ページ)

繰り返し構造の解消

非正規形の繰り返し構造を取り除いた形式を第1正規形(first normal form)と呼ぶ.このような繰り返し構造を解消するためには,現在の主キーに繰り返しを区別するための主キーを加えた複合キーを用いて,別テーブルとして分離する.教科書の例では分離したテーブルの主キーは{伝票コード,商品コード}になっている.上の[レポート]テーブルの場合,次のようになる.教科書51ページも参照.

[レポート]テーブルを[学生]と[レポート評価]の2つのテーブルに分割する.

[学生]
学生番号氏名
1鳥谷敬
5平野恵一
[レポート評価]
学生番号回数レポート評価
1180
1275
1385
5160
5265
5360

[レポート評価]テーブルでは{学生番号,回数}の組み合わせで各レコードが識別される.

[*]下へ▼ ▲[#]上へ

内部構造の解消

内部構造とはフィールドの内部に別のデータが入り込んだ状態を指す.内部構造の解消は,入り込んだフィールドを分離して,分割する.

例えば,[学生]テーブルのフィールドとして<郵便番号・住所>があれば,<郵便番号>と<住所>に分割する.

[*]下へ▼ ▲[#]上へ

実習課題4-1

次のテーブルの繰り返し構造を解消するように変形せよ.ただしレコードは省略してフィールド名だけでよい.

[学生情報]
学生番号氏名科目コード科目名担当者評価
1鳥谷敬1001打撃特論八木裕80
1002守備特論和田豊90
1003走塁特論和田豊75
5平野恵一1001打撃特論八木裕65
1002守備特論和田豊70

[*]下へ▼ ▲[#]上へ

第2正規形(教科書39ページ+52ページ)

部分関数従属性の解消

フィールドの繰り返し構造や内部構造を解消できれば,次の段階として主キーと主キー以外のフィールドの関数従属性に着目する.複合主キーの場合に,それ以外のフィールドは複合主キー全体に関数従属する必要がある.つまり複合主キーの一部に関数従属してはいけない.一部のフィールドが複合主キー全体でなく,一部の複合主キーもしくは主キーに関数従属する部分関数従属状態を解消するように変形したモデルを第2正規形(second normal form)という.教科書40ページの上の例の場合,<商品名>と<単価>は複合主キー{伝票コード,商品コード}に関数従属性していると同時に,<商品コード>にも関数従属性している.したがって,<商品名>と<単価>を別テーブルに分割してやり部分関数従属性を解消している.教科書52ページも参照.

伝票C商品C商品名単価個数
商品C商品名単価
伝票C商品C個数

[*]下へ▼ ▲[#]上へ

実習課題4-2

次のテーブルを部分関数従属性が解消するように変形せよ.ただしレコードは省略してフィールド名だけでよい.

[成績]
学生番号科目コード科目名担当者評価
11001打撃特論八木裕80
11002守備特論和田豊90
11003走塁特論和田豊75
51001打撃特論八木裕65
51002守備特論和田豊70

[*]下へ▼ ▲[#]上へ

第3正規形(教科書41ページ+52ページ)

推移関数従属性の解消

第3正規形(third normal form)は,主キー以外のフィールド間の関数従属性を解消したモデルである.主キー以外のフィールド間に関数従属性が成り立つ場合,それらのフィールドをテーブルから分離して,別のテーブルを形成することで主キーと主キー以外のフィールドという通常の関数従属性に変形する.第3正規形は推移関数従属の解消とも言われることがある.教科書41ページの上のテーブルでは主キー以外のフィールド<得意先コード>と<得意先名>に関数従属性が存在する.そのため元のテーブルには<得意先コード>のみを残し,<得意先コード>と<得意先名>で新しいテーブルを作成して推移関数従属性を解消している.

少なくとも第3正規形まで変形すればリレーショナルデータベースとしてデータを扱うことが可能になる(最低レベル).

伝票C日付得意先C得意先名
伝票C日付得意先C
得意先C得意先名

[*]下へ▼ ▲[#]上へ

実習課題4-3

次のテーブルの推移関数従属を解消するように変形せよ.ただしレコードは省略してフィールド名だけでよい.

[学生]
学籍番号氏名学部コード学部名
1鳥谷敬TH阪神タイガース
5平野恵一TH阪神タイガース
6金本知憲TH阪神タイガース
22藤川球児TH阪神タイガース
31林威助TH阪神タイガース
99狩野恵輔TH阪神タイガース

[*]下へ▼ ▲[#]上へ

このサイトに関するお問い合わせは,連絡先のページをご覧ください.

このページのボトムへ講義資料このページのトップへ

前のページに戻る  1  2  3  4  次のページへ進む   データベースマネジメントの目次に戻る ,        © 2001 Ayumi Yoshikawa