iseeit.jp 情報通信技術

『情報通信技術』に関するスキルのほかに、『情報セキュリティ』に関するスキルも重点テーマです。また、特に今後の『高速モバイル通信』と『インターネット』に注目していきます。

正規形

データベース設計における正規形について、情報処理技術者試験の午前問題を基に見てみることにします。なお、試験問題の全文については、情報処理技術者試験センターのWebサイト http://www.jitec.jp/ にて公開されています。

まずは、平成19年度テクニカルエンジニア(データベース)午前試験問題の問24からです。

問24 第1、第2、第3正規形とそれらの特徴aからcの組み合わせとして、適切なものはどれか。

a:どの非キー属性も、主キーの真部分集合に対して関数従属しない。

b:どの非キー属性も、推移的に関数従属しない。

c:繰返し属性が存在しない。

  第1正規形 第2正規形 第3正規形

答えは、ウ。

正規形の説明では、候補キーという用語がよく登場します。冗長がなく一意性を有する属性が候補キーとなります。その候補キーの中から主キー(Primary Key)が選ばれます。また、非キー属性は、候補キー以外の属性をいいます。

第2正規形は、第1正規形で、かつ、すべての非キー属性がすべての候補キーに対して完全関数従属するときのことをいいます。

関数従属とは、たとえば、属性Aの値を決めると常に属性Bの値が定まるとき、BはAに関数従属するといいます。(この場合、A→Bと表記します。)

そして、完全関数従属は、非キー属性が、候補キーを構成する複数の属性について関数従属しているような場合に、非キー属性には、候補キーを構成する一部の属性について関数従属(部分関数従属)はない、というような意味です。

なお、集合AがBの部分集合で、かつ、Bと等しくないとき、集合Aは集合Bの真部分集合であるといいます。「どの非キー属性も、主キーの真部分集合に対して関数従属しない。」とは、どの非キー属性も主キーを構成する一部の属性に対して関数従属するものではない、というようなことになりましょうか。まだ、第2正規化の余地があるということになります。

第3正規形は、第2正規形で、かつ、非キー属性のすべてが候補キーに非推移的に関数従属するときのことをいいます。

推移的に関数従属とは、たとえば、属性Aの値を決めると常に属性Bの値が定まり、なおかつ、そのときの属性Bの値により常に属性Cの値が定まるとき、CはAに推移的に関数従属するといいます。

第3正規形は、非キー属性の中に、候補キーに推移的に関数従属する属性がないことになります。

ちなみに、関数従属について、平成17年度テクニカルエンジニア(データベース)午前試験問題の問24もみてみます。

問24 関数従属に関する記述のうち、適切なものはどれか。ここで、A、B、Cはある関係の属性の集合とする。

ア BがAに関数従属し、CがAに関数従属すれば、CはBに関数従属する。

イ BがAの部分集合であり、CがAに関数従属すれば、CはBに関数従属する。

ウ BがAの部分集合であれば、AはBに関数従属する。

エ BとCの和集合がAに関数従属すれば、BとCはそれぞれがAに関数従属する。

答えは、エ。

さて、RDBのテーブル設計において、正規化は、必須のスキルです。ただ、必ずしも第3正規形まで進めればよいものでもなく、レコード件数やリレーションの複雑さに応じて、部分的に第2正規化そして部分的に第3正規化を行う、といったことも行われます。実際に非正規化の際にパフォーマンスが悪くなる、といったことはよくあることです。DBMSの性能に応じて、ということになりましょうか。あるいは、アプリケーションプログラムで調整可能な範囲で、ということにもなりましょうか。

 ⇒ affiliated with
 (2011.08.28 21:00)