データベースマネジメント:正規化(最終更新:2015/12/06 16:33:44 JST)
データベースでもプログラムでも同様のことが言えるが,他人が見て理解できるように設計されていないと後々問題を引き起こす.例えば最初にデータベースの設計を行った人が転勤,退職していなくなると,他の人では修正なども行えないという困った状態になる.このような問題を生じさせないようにする設計方法の一つが正規化(normalize)である.正規化は1つのテーブル内の属性項目の関係をできるだけシンプルにすることで,データモデルを理解しやすくすることと,データ更新を必要最小限のテーブルにとどめることで効率化を図ることが目的である.
リレーショナルデータベースの設計は,データモデルを作成することであるが,最初から理想的なデータモデルを作成することは難しい場合も多い.例えば,データベースを利用していない業務にデータベースを導入する場合は,現在利用されている書類などからデータモデルを作成していくことになる.この場合,とりあえず何も考えずに属性項目をテーブル内に並べた状態は非正規形になる.この非正規形をいろいろな規則に従い洗練していく過程が正規化である.正規化にはBoyce-Codd(BC)正規形を含めて次のような6段階がある.
例えば教科書38ページのような売上伝票をデータベースで管理することを考える.商品明細項目が複数あるため繰り返し構造となっている.フィールドに繰り返し構造や内部構造が存在する場合,非正規形(non normal form)であるという.
例えば,次の[レポート]テーブルは非正規形である.
学生番号 | 氏名 | レポート評価 | ||
---|---|---|---|---|
1回目 | 2回目 | 3回目 | ||
1 | 鳥谷敬 | 80 | 75 | 85 |
5 | 平野恵一 | 60 | 65 | 60 |
非正規形の繰り返し構造を取り除いた形式を第1正規形(first normal form)と呼ぶ.このような繰り返し構造を解消するためには,現在の主キーに繰り返しを区別するための主キーを加えた複合キーを用いて,別テーブルとして分離する.教科書の例では分離したテーブルの主キーは{伝票コード,商品コード}になっている.上の[レポート]テーブルの場合,次のようになる.教科書51ページも参照.
[レポート]テーブルを[学生]と[レポート評価]の2つのテーブルに分割する.
|
|
[レポート評価]テーブルでは{学生番号,回数}の組み合わせで各レコードが識別される.
内部構造とはフィールドの内部に別のデータが入り込んだ状態を指す.内部構造の解消は,入り込んだフィールドを分離して,分割する.
例えば,[学生]テーブルのフィールドとして<郵便番号・住所>があれば,<郵便番号>と<住所>に分割する.
次のテーブルの繰り返し構造を解消するように変形せよ.ただしレコードは省略してフィールド名だけでよい.
学生番号 | 氏名 | 科目コード | 科目名 | 担当者 | 評価 |
---|---|---|---|---|---|
1 | 鳥谷敬 | 1001 | 打撃特論 | 八木裕 | 80 |
1002 | 守備特論 | 和田豊 | 90 | ||
1003 | 走塁特論 | 和田豊 | 75 | ||
5 | 平野恵一 | 1001 | 打撃特論 | 八木裕 | 65 |
1002 | 守備特論 | 和田豊 | 70 |
フィールドの繰り返し構造や内部構造を解消できれば,次の段階として主キーと主キー以外のフィールドの関数従属性に着目する.複合主キーの場合に,それ以外のフィールドは複合主キー全体に関数従属する必要がある.つまり複合主キーの一部に関数従属してはいけない.一部のフィールドが複合主キー全体でなく,一部の複合主キーもしくは主キーに関数従属する部分関数従属状態を解消するように変形したモデルを第2正規形(second normal form)という.教科書40ページの上の例の場合,<商品名>と<単価>は複合主キー{伝票コード,商品コード}に関数従属性していると同時に,<商品コード>にも関数従属性している.したがって,<商品名>と<単価>を別テーブルに分割してやり部分関数従属性を解消している.教科書52ページも参照.
|
|
|
次のテーブルを部分関数従属性が解消するように変形せよ.ただしレコードは省略してフィールド名だけでよい.
学生番号 | 科目コード | 科目名 | 担当者 | 評価 |
---|---|---|---|---|
1 | 1001 | 打撃特論 | 八木裕 | 80 |
1 | 1002 | 守備特論 | 和田豊 | 90 |
1 | 1003 | 走塁特論 | 和田豊 | 75 |
5 | 1001 | 打撃特論 | 八木裕 | 65 |
5 | 1002 | 守備特論 | 和田豊 | 70 |
第3正規形(third normal form)は,主キー以外のフィールド間の関数従属性を解消したモデルである.主キー以外のフィールド間に関数従属性が成り立つ場合,それらのフィールドをテーブルから分離して,別のテーブルを形成することで主キーと主キー以外のフィールドという通常の関数従属性に変形する.第3正規形は推移関数従属の解消とも言われることがある.教科書41ページの上のテーブルでは主キー以外のフィールド<得意先コード>と<得意先名>に関数従属性が存在する.そのため元のテーブルには<得意先コード>のみを残し,<得意先コード>と<得意先名>で新しいテーブルを作成して推移関数従属性を解消している.
少なくとも第3正規形まで変形すればリレーショナルデータベースとしてデータを扱うことが可能になる(最低レベル).
|
|
|
次のテーブルの推移関数従属を解消するように変形せよ.ただしレコードは省略してフィールド名だけでよい.
学籍番号 | 氏名 | 学部コード | 学部名 |
---|---|---|---|
1 | 鳥谷敬 | TH | 阪神タイガース |
5 | 平野恵一 | TH | 阪神タイガース |
6 | 金本知憲 | TH | 阪神タイガース |
22 | 藤川球児 | TH | 阪神タイガース |
31 | 林威助 | TH | 阪神タイガース |
99 | 狩野恵輔 | TH | 阪神タイガース |