【デスペ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
正答はイ。
第3正規形には、部分関数従属と推移的関数従属がない状態です。
「第2正規形から第3正規形になる条件」、つまり第3正規化では、推移的関数従属を解消します。
ア:部分関数従属がないのは、第2正規形である条件です。
イ:正しい。推移的関数従属がないのは、第3正規形である条件です。
ウ:第1正規形である条件です。原子定義域とは、項目が単一値である(繰り返し項目ではない)ことです。
エ:ボイス・コッド正規形である条件です。正解には不要なので割愛します(今後も問われることはないので、理解する必要もありません)。
推移的関数従属の注意点
少し難しいので、消去法で正答します。
正答はイ。
ア:繰り返し属性への従属があると、非正規形です
イ:正しい。
ウ:候補キーの一部からの従属とは、部分関数従属なので、第1正規形です。
エ:非属性→非属性とは、推移的関数従属を指しているため、第2正規形です。
消去法でイと正答できます。
第3正規形は候補キー→候補キー、例えば「主キー→主キー」や「非主キー→主キー」など、主キーを特定する従属が残っていることがあります。
正答はウ。
今回は下図の上の関係が書かれています。
第3正規形には「候補キー→候補キー」の従属が残っている場合があります。
まず、C→Bと非候補キーCから候補キーBへ戻っているので、エ「ボイス・コッド正規形」ではありません。
次に、候補キー{A, B}の時に、A単独やB単独に従属する関係は明記されてないため、部分関数従属はありません。よってア「第1正規形」ではありません。
最後に候補キー{A, B}を主キーとした時に、非キーCに従属した非キーはないので、推移的関数従属もありません。よって「第2正規形」ではなく、第3正規形と判断します。
問題演習2
正答はア。
一発でア「第3正規形」を引いてください。
情報無損失分解:結合し直せば分解前の関係を復元できる分解
関数従属性保存:分解後に分解前に持っていた従属関係を保っている
以上2つを満たしているのは、「第3正規形まで」。
よって第3正規形以降の、イ「ボイスコッド正規形」、エ「第4正規形」は誤り。またウの「第1正規形への変換(第1正規化)」は表を分解しないので誤りと判断。
正答はウ。
ア:関数従属性保存は第3正規形まで。「全て」ではない。
イ:情報無損失分解は第3正規形まで。「全て」ではない。
ウ:正しい。
エ:多値従属性は第4正規形までは保たれます。
まとめ
お疲れ様でした!
以下2つの図を、学習ノートに書き出したり、スマホにダウンロードしておくと良いかなと思います。
私が合格してきた勉強法についてもNoteにしました。
まずは書籍の読み倒し方、AMIIの勉強だけでも参考にして頂ければ、嬉しいです。
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ
この記事が参加している募集
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ