とあるITエンジニアたちの備忘録

新米エンジニア5人がお送りする、ちょっとためになる話

データベース ~データの正規化~

みなさん。

こんにちは、さいばーきゃっとです。

 

今月から、またオラクルデータベースについて、綴っていこうと思います。

 

最近は、10月の基本情報技術者試験に向け勉強をしています。

データベースの分野を勉強していたところ、データベースの構造についての知識が問われていたので、今回はそれについて解説していきます。

 

データの正規化

関係データベース(例:オラクルデータベース)では、多くの表を組み合わせて、データを管理しているので、表の主キーや外部キーのデータが追加、更新、削除されたときには、データの不整合(いわゆる矛盾)が発生しないように、反映させなくてはなりません。

 

そのためには、正しくデータが管理できるように表を正規化しなければなりません。

しっかりと表が正規化できていると、データベースからデータの重複や矛盾を取り除くことができます。

 

正規化には、4つのフェイズがあります。

非正規形 → 第1正規形 → 第2正規形 → 第3正規形の順番に表を正規化します。

非正規化 

 

以下の表をご覧ください。

f:id:cloudy0901:20160607014707p:plain

 

赤枠の箇所を見ると、1人の学生(鈴木一郎)が複数の資格を取得しているため、1つのレコードに、「資格名」と「資格コード」、「取得日」が複数のデータが存在してしまっています。

 

このような繰り返し構造を持つ表を非正規形といい、この表ではデータを管理することはできません。

 

ですので、この非正規形されている表を正規化していきます。

 

第1正規形

まず、上記の非正規形の表を正規化します。

 

以下をご覧ください

f:id:cloudy0901:20160607015110p:plain

1つのレコードに複数のデータが存在していましたので、それぞれ1つずつレコードを作成しました。

 

このように繰り返し構造を取り除いた表を第1正規形といいます。

これで、ひとまずは関係データベースの表として管理できるようになりました。

しかしこの第1正規形した表のままでは、使い勝手がよくありません。

さらに、使い勝手を良くするため、さらに正規化していきます。

 

第2正規形

例えば、上記の表では、「資格コード」に対応する「資格名」を変更しようとした場合には、全データの「資格名」を、変更しなければなりません。

 

このような問題を解決するためには、この表を、ある項目別に分割する必要があります。

 

以下の表をご覧ください。 

 

第2正規形①

f:id:cloudy0901:20160607022605p:plain

 

第2正規形②

f:id:cloudy0901:20160607022547p:plain

 

第2正規形③

f:id:cloudy0901:20160607020845p:plain

 

上記のように、主キーによって項目が決まるように分割された表を第2正規形といいます。

 

第2正規形の特徴は、「推移的関係従属」である点です。

推移的関係従属とは、例えば項目の「担任」は、主キーである「学籍番号」が決まれば「クラス」が決まり、「クラス」が決まれば「担任」が決まるといった「学籍番号」→「クラス」→「担任」という決まり方のことです。

 

第3正規形

第3正規形は、第2正規形と似ている部分がありますが、決定的は違いは、第3正規形「推移的関係従属」ではない点です。

 

以下の表をご覧ください。

 

①学生表

f:id:cloudy0901:20160607022103p:plain

 

②担任表

f:id:cloudy0901:20160607022112p:plain

 

③資格表

f:id:cloudy0901:20160607022120p:plain

 

④学生資格取得表

f:id:cloudy0901:20160607022127p:plain

 

上記のように、レコードの項目すべてが、主キーのみで決まるように分割された表を第3正規形といいます。

 

このように、データを種類ごとに細分化をすることで、データの正規化に実現し、データの重複や矛盾を排除することができます。

 

基本情報技術者試験では、頻繁に出題されるので、覚えておくといいでしょう!

 

 

 ※)私が使用しているテキストです。

キタミ式イラストIT塾 基本情報技術者 平成28年度

キタミ式イラストIT塾 基本情報技術者 平成28年度