The入門:DBの正規化についてまとめてみた

 こんにちは、ネットワークエンジニアの「だいまる」です。今回は、秋に実施されるデータベーススペシャリスト合格に向けて、勉強しているデータベースの正規化についてまとめていきたいと思います。

正規化とは

 データベースの正規化とは、「一定のルールに従い変形を実施すること」です。リレーショナルデータベース(RDB)では、「正規化理論」に従いリレーション(関係)を分解することになります。
 そして、正規化の目的はRDB上の異常値や不整合をなくすことになります。場合によりますが、正規化の流れは第一正規形から第五正規形まで実施することが一般的だそうです。
 今回は、この第一正規形から第三正規形までをまとめていき、第四正規形と第五正規形は次回まとめていきます。

第一正規形

 まず、第一正規形の定義について説明していきたいと思います。

(定義)
 ・属性が全て単一値をとること

 上記の定義の意味は、一言で言うと組・タプルに重複するデータがないことを示しており、下の絵のようなイメージです。

 この正規化を実施することで、1つのデータのみを更新するのみでOKとなり、複数の同一商品のデータで内容が少し異なるといったことがなくなります。保つことが可能となります。
 正規化で重要なのが、「候補キー」、「スーパーキー」、「主キー」、「代理キー」になります。

候補キー(Candidate Key)

 候補キーとは、「リレーションのタプルを一意に識別できる属性または組みのうち、極小のもの」となります。

 上記のテーブルで候補キーについて、説明します。
発注番号だけでは「aaaa」が2つあるため、タプルを一意に識別できません。しかし、商品番号を使うことで発注番号「aaaa」の中のタプルも識別できるようになります。
こうして、属性数が一番少なくなるように選んだものが「候補キー」となります。

スーパーキー(Super Key)

 スーパーキーは、「タプルを一意に識別できる属性」※極小ではない

スーパーキーは、先ほどの候補キーとは少し異なります。このスーパーキーとは、候補キー+何かのキーがスーパーキーになります。

主キー(Primary Key)

 主キーとは、「候補キーの1つであり、Null値をとらずにメインで利用する属性」です。
 下の図で説明するのであれば、発注番号はNULL値を取らずに、候補キーの1つであるため、条件を満たします。
 主キーは基本的によく利用されるのは、検索を高速化できる候補キーや整合性が保てる候補キーを利用することが多いようです。


代理キー(Alternative Key)

 代理キーは、「主キーに選ばれなかった候補キー」となります。

第二正規形

 第二正規形の定義は、以下の通りとなります。
(定義)
 ・第一正規形の条件を満たしていること
 ・全非キー属性は各候補キーに完全関数従属
  ※非キー属性:候補キーに選ばれなかった属性

完全関数従属

 第二正規形の定義で出てきた「完全関数従属」とは、以下の定義になります。
(定義)
 ・X→Yにおいて、真部分集合X'について、X'→Yが成立しないこと

 
まず、集合(X,Y)であれば、(X,Y)、(X)、(Y)の3つの要素が存在する。この時の真部分集合は、(X)と(Y)の2つを示す。
つまり、下の図の(A)、(B)から緑の集合に遷移するような関係が成り立てば、「完全関数従属」ではないということになる。

 上記のデータベース例では、発注番号→発注先商品番号→商品名の関係が成立することから、第二正規形の条件である「全非キー属性は各候補キーに完全関数従属する」を満たしていません。
 そこで、この条件を満たすために、以下のテーブルに分割し、第二正規形の完成です。

第三正規形

 第三正規形の定義は以下の通りです。
(定義)
 ・第二正規形の条件を満たしていること
 ・全非キー属性は、以下なる候補キーにも推移的遷移をしないこと

ここでいう「推移的遷移」とは、主キー以外の属性から関数従属を持つものを言います。
 先ほど利用した例では、第三正規形はすでに成立しているので、説明できませんが、他の例でいくと以下のようなイメージです。

最後に

 今回は、データベースの基本中の基本である正規化の中の第一正規形から第三正規形についてまとめてみました。正直、データベースは自分の分野とは全く異なるので、認識が異なっている場合はぜひコメントいただけると助かります。
 次回は、第四正規形と第五正規形をまとめていきたいと思います。


この記事が気に入ったらサポートをしてみませんか?