自称週末ファーマーの国家試験受験記

自己啓発の延長なのか、自己実現の手段なのか、はたまた意地の張り合いか。生きているうちに“何か”を成し遂げたいから走り続けているような感じがする

第103話 経営情報システム⑧ 正規化

このへんは楽しいのですが、これから先が退屈になるんですよね。ほんと、興味ない人にとっては苦痛のナニモノでもないんです。本試験を迎えるにあたってもっともイヤだったのが経営情報システムでしたから。
とはいえ、コイツも60点以上をとらないと合格できませんからね、やりたいことだけをやるのが子供なら、やるべきことをやるのが大人ですし(笑)

今回は正規化について概観しましょう。

DBの正規化とは、関連の強いデータのみを一つのテーブルにまとめてデータの独立性を高めることである。
第3正規形まで正規化することによって、冗長性のないデータ項目のグループが作れるが、処理効率を考えると必ずしも良いといえない場合がある。パフォーマンス重視のシステムの場合、あえて第3正規形まで行わない場合もある。
正規化をおこなうことには次のようなメリットがある。
①表を分割することで、表の目的が明確になる
②分割した各表の間で関連性が保たれているため、データの更新の手間を省略できる
③繰り返し項目を整理することで表の大きさを小さくすることが出来る

正規化された表を作ることでDBへSQLを使って指図すれば要求どおりの適切なデータを抽出できることになる。

1.非正規形
 非正規形の表とは、繰り返し項目が含まれている表のこと。同じ行に、複数のデータがある表といえば分かるだろうか。

 ●非正規形 → 繰り返し項目がある

RDBにおいては、非正規形の表では、正しくデータを抽出することが出来ないため、正規化という作業を行う。

2.第1正規化
 正規化されていない表中に現れる繰り返し項目を分離して、独立した行にすること
非正規形から第1正規形の表にするには次の手順を踏む。
①繰り返し項目を探す
②繰り返し項目を削除する
非正規形の表から、第1正規形にすると、行が増えますよね。

3.第2正規化
 第1正規形の表から、主キーの一部だけから特定できる項目を別の表にすること
主キーとは、その項目を選び出すとその行(ヨコ全部)が一意に決まる列をいう。主キーとなる項目は、テーブル内で重複したデータが存在しないこと(一意性制約)および空値でないこと(NOT NULL制約)が求められる。
第1正規形の表から第2正規化するためには次の手順を踏む。
①主キーを特定する
②主キーと主キーに従属する項目を、表から分離する
なお、主キーが複数になる場合を複合キーといい、主キーの一部に従属する項目を、表から分離する。

 ●第2正規化 → ヨコが一意に決まる主キーを特定

4.第3正規化
 主キー以外の項目で特定できる項目を別の表にすること。第3正規化を行った表のことを第3正規形という。
第2正規形の表を、第3正規化するには、次の手順を踏む。
①各表において主キー以外に従属関係にある項目を特定する
②上記で特定した項目に従属する項目を、表から分離する
③計算で求める項目がある場合は、その項目を削除する
なお、他の表の主キーになる項目を、外部キーという。

 ●第3正規化 → 主キー以外の「○○コード」「○○ID」を外部キーとし、紐付けを考える

 「キー」になるのは“コード”。コードが紐付く情報を丁寧に探っていけば第3正規形までたどり着ける。
ぶっちゃけ、「商品コード」とか「顧客コード」とか「受注番号」とか「商品ID」とか、そういった○○コードと呼ばれるものは主キーもしくは外部キーになりやすいということだ。あとは一意性とか紐付けをたどっていけばOKだ(少なくとも著者はそう理解している)。
著者は、勤務先の社内の基幹システム開発にプロジェクトに携わったことがあった。そこでずいぶんコードからの紐付けをやった記憶がある。だから正規化については、抵抗なく学習することが出来た。

こういうふうにみてみると“正規化”はものすごくいいことのように思えますが、もちろん、正規化の問題点もあります。
正規化を進めるということは表が増え続けるということ。さらに各表のデータを結合して、DBへの要求をアウトプットする必要があるので演算が増えるということ。ゆえにアクセス効率が低下するという問題が発生する。

本当は具体的に表を載せて説明できればよかったのだけれど、ウデが未熟なもんでして・・・。

続く。