関係の正規化
関係がスカラ値のみを持ちうるとき、その関係を第1正規形 (first normal form; 1NF) であるという。スカラ値とはそれ以上分割できない値のことをいい、単一の数値や単語は一般にスカラ値だが、表や配列、カンマで区切った文字列などはふつうスカラ値ではない。第1正規形を満たさない関係は、その中の値を必ずしもリレーショナル演算(関係代数ないし関係論理による演算)の対象とすることができないという問題を持つ。
第1正規形の定義が意味することは、リレーショナル演算は単一の値として定義された以上に分割してデータを取り扱うことができないから、その必要があるデータは初めから単一の値に分解した形で関係に格納できるように設計すべきだということである。つまり、ある値がスカラ値であるかどうかは、その値をそれ以上分解して操作する必要があるかどうかによって初めて定まる。
同一定義域に属するスカラ値を複数組み合わせたもの(これはスカラ値でない)を1つのデータとして関係に格納しようとするとき、そのデータを繰り返しグループや反復群などという。データベース設計を行う際、スカラ値でないものを導入する必要に迫られる場合には、このような形になっていることが多い。繰り返しグループを排除して第1正規形にするには、関係内の反復する内容をそうでないものと別々の関係に分割し、それらの関係を主キーと外部キーの関連で結びつければよい。
患者は病気にかかっており、契約した保険会社の保険に入っている。 精神科医と保険会社と病気の正当な組み合わせだけが、この関係に含まれるような制約が、全くなかった場合には、この3つの属性をもつ精神科医-保険会社-病気関係は、正しく現実世界の要件に適合するように、再設計をしなければならない。
しかしながら、ここで次の規則を適用すると前提する。 「ある精神科医が、保険会社 P の保険に入っている患者に対して、払い戻しができる範囲での治療法を行うことを承認されていて、その精神科医は病気 C の治療ができるのであれば、 – 保険会社 P が病気 C を保険の対象としている場合 – その精神科医は病気 C にかかっていて保険会社 P の保険に入っている患者に対して払い戻しができる範囲での治療を行うことができる、という命題は真にならなければならない。」
精神科医-保険会社-病気関係には、明らかに冗長性がある。 Dr. Lowenstein のデータを例にして考える。
Dr. Lowenstein がFriendlyCare社から払い戻しを受けているという事実が、2つの組に出現している。
Dr. Lowenstein がHealthco社から払い戻しを受けているという事実が、2つの組に出現している。
Dr. Lowenstein が不安状態の治療をすることができるという事実が、2つの組に出現している。
仮に AHA コースに新しい参考図書を追加しようとする場合、そのコースの各講師のデータに対して参考図書を追加しなければならない。 逆に AHA コースに新しい講師を追加しようとする場合も同様である。 形式的にはこの例の関係には次の2つの多値従属性がある。
{コース} {参考図書}
{コース} {講師}
この例の関係のように、決定項(多値従属性の左側)が候補キーではない多値従属性のある関係では、冗長性がある。 正規化においては、自明でない多値従属性の存在する関係においては決定項が候補キーである場合に限り、第4正規形 (4NF) である。 このとき多値従属性は事実上は関数従属性である。 多値従属性は関数従属性を一般化した概念と位置づけることができる。
前述の例の関係は、次のように2つの第4正規形 (4NF) の関係に分解して正規化することができる。