
【デスペ5問】正規形の定義(データーベーススペシャリスト)
このNoteにはデータベーススペシャリスト(デスペ)AMIIに出題される正規化・正規形の問題をまとめました。
正直データベース設計は、応用情報技術者試験(AP)までは何となく解けていたかもですが、部分関数従属・推移的関数従属、さらに第3正規形以降の形態について理論的に理解する必要があります。
大丈夫。私も同じでしたよ。デスペで初めて厳密に理解しました。



とはいえデータベースは第3正規形で留めるのが一般的。
第3以降は、キーワードだけ知っていれば問題ありません。

ただし第3正規形に例外知識が必要です。
第3正規形では主キーからの従属だけになっていると思っていましたが、実は違うのです。
また、推移的関数従属なのか迷うケースもあります。 この2つはAMIIで問われます。午後では問われないです(問われたら、ただでさえ難しいのに、ヤバすぎ)。

このNoteは、データベーススペシャリスト独学合格、IT専門学校の先生の経験を基に書いています。


それでは始めましょう!
講座:3段階
正規形・正規化を3段階で学習します。
非~第3正規形, 第1~3正規化まど
第3正規形までが持っている2つの性質
情報無損失分解
関数従属性保存
ボイス・コッド正規形~第5正規形
非~第3正規形, 第1~3正規化
第3正規形までは応用情報技術者試験までに出題されてきました。
正直何となく解けていた方もいらっしゃるでしょう(私がそうでした)。
デスペでは、従属性の違いをしっかり認識することから始めます。

非正規形:繰り返し項目がある
↓ 第1正規化:繰り返し項目を排除第1正規形:部分関数従属がある
↓ 第2正規化:部分関数従属を排除第2正規形:部分関数従属がない(完全関数従属である)
推移的関数従属がある
↓ 第3正規化:推移的関数従属を排除第3正規形:大方のデーターベースが目指す形
繰り返し項目:1つの項目に複数の値が格納されている
部分関数従属:「候補キーの一部」に従属した属性がある
部分関数従属がないこと:完全関数従属
推移的関数従属:「非候補キー」に従属した属性はある
非正規形:繰り返し項目が残る
第1正規形:部分的関数従属と推移的関数従属が残る
第2正規形:推移的関数従属が残る
第3正規形:大方のデーターベースが目指す形
非正規形は繰り返し項目で見分けられます。
繰り返し項目を単一値にするには行を分けるので、行を特定するために複合主キーにするしかありません。(または新しい主キーを1つ作り直すか)

複合主キーは、複数の項目が主キーになっているため、複合主キーを構成している項目に従属する「部分関数従属」があり得ます。
下図のように複合主キーが2つの項目から成れば、1つの項目に従属するかを考えます。部分関数従属があるなら、複合主キーの一部を主キーに設定した別表に分解します。
なお、主キーが1つなら、第1正規形は自動的に第2正規形になっています。

もし複合主キーが3つの項目なら、1つor2つの項目に従属した項目があるかもしれません。複合主キーが4つなら、1~3つの項目からの従属があるか探します。
主キー以外の項目に従属している「推移的関数従属」があると、また第2正規形です。主キー以外の項目を主キーに設定した別表に分解して、第3正規形を目指します。

なお、第2正規形にした時に、推移的関数従属がなければ、自動的に第3正規形になります。
第3正規形までが持っている2つの性質
データベース設計では第3正規形を目指すのが一般的です。
理由は、第3正規形までが「情報無損失分解」「関数従属性保存」を満たす最後の形態だからです。

情報無損失分解:結合し直せば分解前の関係を復元できる分解
関数従属性保存:分解後に分解前に持っていた従属関係を保つ
ボイス・コッド正規形~第5正規形
第3正規形以降も、ボイス・コッド, 第4, 第5正規形があります。
AMII対策として、特徴の用語だけを知っておきましょう。

ボイス・コッド正規形:自明な関数従属性がある
第4正規形:自明な多値従属性がある
第5正規形:自明な結合従属性がある
AMIIの用語問題では出題されますが、午後問題ではめったに出題されないので、実際にどんなデータ値なのかはテキストで見る程度でOKです。
最後に、正規形・正規化・性質を全てまとめます。

問題演習1
第2正規形から第3正規形になるための条件はどれか。
ア:部分従属性がない
イ:推移的関数従属性がない
ウ:属性の定義域が原子定義域である
エ:関数従属A→Bについて、Bは非キー属性である
データベーススペシャリスト 令和04年午前2問05より改変
正答はイ。
第3正規形には、部分関数従属と推移的関数従属がない状態です。

「第2正規形から第3正規形になる条件」、つまり第3正規化では、推移的関数従属を解消します。
ア:部分関数従属がないのは、第2正規形である条件です。
イ:正しい。推移的関数従属がないのは、第3正規形である条件です。
ウ:第1正規形である条件です。原子定義域とは、項目が単一値である(繰り返し項目ではない)ことです。
エ:ボイス・コッド正規形である条件です。正解には不要なので割愛します(今後も問われることはないので、理解する必要もありません)。
推移的関数従属の注意点
少し難しいので、消去法で正答します。
第3正規形であり得る関数従属はどれか。
ア:候補キーから繰り返し属性への関数従属
イ:候補キーから他の候補キーへの関数従属
ウ:候補キーの一部から非キー属性への関数従属
エ:非キー属性から非キー属性への関数従属
データベーススペシャリスト 平成31年午前2問08より改変
正答はイ。

ア:繰り返し属性への従属があると、非正規形です
イ:正しい。
ウ:候補キーの一部からの従属とは、部分関数従属なので、第1正規形です。
エ:非属性→非属性とは、推移的関数従属を指しているため、第2正規形です。
消去法でイと正答できます。
第3正規形は候補キー→候補キー、例えば「主キー→主キー」や「非主キー→主キー」など、主キーを特定する従属が残っていることがあります。

{A, B, C}の候補キーが{A, B}と{A, C}であり、{A, B}→CとC→Bの関数従属性があるとき、{A, B, C}はどこまで正規形されているか。
ア:第1正規形
イ:第2正規形
ウ:第3正規形
エ:ボイス・コッド正規形
正答はウ。
今回は下図の上の関係が書かれています。
第3正規形には「候補キー→候補キー」の従属が残っている場合があります。

まず、C→Bと非候補キーCから候補キーBへ戻っているので、エ「ボイス・コッド正規形」ではありません。
次に、候補キー{A, B}の時に、A単独やB単独に従属する関係は明記されてないため、部分関数従属はありません。よってア「第1正規形」ではありません。
最後に候補キー{A, B}を主キーとした時に、非キーCに従属した非キーはないので、推移的関数従属もありません。よって「第2正規形」ではなく、第3正規形と判断します。
問題演習2
情報無損失分解かつ関数従属性保存が成り立つものはどれか。なお、情報無分解とは結合によって元の関係が得られる分解を指す。
ア:第2正規形から第3正規形への変換
イ:第3正規形からボイス・コッド正規形への変換
ウ:非正規形から第1正規形への変換
エ:ボイス・コッド正規形から第4正規形への変換
データベーススペシャリスト 令和05年午前2問06より改変
正答はア。
一発でア「第3正規形」を引いてください。

情報無損失分解:結合し直せば分解前の関係を復元できる分解
関数従属性保存:分解後に分解前に持っていた従属関係を保っている
以上2つを満たしているのは、「第3正規形まで」。
よって第3正規形以降の、イ「ボイスコッド正規形」、エ「第4正規形」は誤り。またウの「第1正規形への変換(第1正規化)」は表を分解しないので誤りと判断。
第1正規形~第5正規形までの正規化について正しい記述はどれか。
ア:全ての正規化では、関数従属性が保存される
イ:全ての正規化では、情報無損失の分解である。なお、情報無分解とは結合によって元の関係が得られる分解を指す。
ウ:第3正規形までは、情報無損失・関数従属性保存の分解である
エ:第4正規形から第5正規形への正規化では、多値従属性が保存される。
データベーススペシャリスト 平成31年午前2問07より改変
データベーススペシャリスト 令和03年午前2問05より改変
正答はウ。
ア:関数従属性保存は第3正規形まで。「全て」ではない。
イ:情報無損失分解は第3正規形まで。「全て」ではない。
ウ:正しい。
エ:多値従属性は第4正規形までは保たれます。

まとめ
お疲れ様でした!
以下2つの図を、学習ノートに書き出したり、スマホにダウンロードしておくと良いかなと思います。


私が合格してきた勉強法についてもNoteにしました。
まずは書籍の読み倒し方、AMIIの勉強だけでも参考にして頂ければ、嬉しいです。
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ
いいなと思ったら応援しよう!
