基本情報でわかる正規化「関係データベースの正規化は、従属性の矢印を引けばわかる」

error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事ですが、試験対策ではなく、技術用語を理解する上では問題ないと考えています。
試験対策としてお読みになる場合は、現在の試験制度では出題されない午後問題を一部題材にしているので、ご注意ください。
この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。今回のテーマは、関係データベースの正規化です。
関係データベースの正規化とは?
はじめに、関係データベースの正規化とは何かを説明しましょう。教科書通りに堅苦しく説明すると、以下のようになります。
この説明では、「覚えることが多すぎてよくわからない!」と感じるでしょう。よい方法があります。
なんやかんや言っても、第 3 正規形が無駄や矛盾を排除した完成形なのですから、まず 第 3 正規形 とは何かをしっかり理解すればよいのです。
そうすれば、「非正規形」「第 1 正規形」「第 2 正規形」や、「繰り返し」「部分従属性」「推移従属性」もすんなり理解できます。
第 3 正規形とは何かを説明しましょう。
関係データベースでは、表に必ず主キー(他のレコードと重複しないユニークな項目)がなければなりません。主キーがないとレコードを区別できないからです。
そして、これが大事なのですが、表には、主キーに従属する項目だけがあるようにします。主キーに従属するとは、主キーによって特定できる、という意味です。
この「主キーに従属する項目だけがある」という表が、無駄や矛盾が生じない第 3 正規形なのです。
以下に、第 3 正規形の表の例を示します。これは、従業員の情報を格納した従業員表です。「主キーに従属する項目だけがある」ことを、主キーから他の項目に矢印を引いて確認してみましょう。
下線を付けた「従業員番号」が主キーです。
従業員番号 | 従業員氏名 | 性別 | 生年月日 |
「従業員番号」によって→「従業員氏名」が特定できます。
「従業員番号」によって→「性別」が特定できます。
「従業員番号」によって→「生年月日」が特定できます。
主キーから他のすべての項目に従属性の矢印が引けました。これが、第 3 正規形です。
もしも、よけいな矢印が引けたり、矢印を引けない項目があったりしたら、第 3 正規形ではありません。
関係データベースの正規化に関する午前問題
それでは、関係データベースの正規化に関する午前問題を見てみましょう。
以下は、正規化されていない従業員表(先ほど示した例とは、表の項目に違いがあります)を、第 3 正規形にしたものを選ぶ問題です。難しく考える必要はありません。主キーから他のすべての項目に従属性の矢印が引ければ、第 3 正規形です。
“従業員” 表を第3正規形にしたものはどれか。ここで、下線部は主キーを表す。
従業員 (従業員番号, 従業員氏名, {技能コード, 技能名, 技能経験年数})
( { } は繰返しを表す)
ア
従業員番号 | 従業員氏名 |
技能コード | 技能名 | 技能経験年数 |
イ
従業員番号 | 従業員氏名 | 技能コード | 技能経験年数 |
技能コード | 技能名 |
ウ
従業員番号 | 技能コード | 技能経験年数 |
従業員番号 | 従業員氏名 |
技能コード | 技能名 |
エ
従業員番号 | 技能コード |
従業員番号 | 従業員氏名 | 技能経験年数 |
技能コード | 技能名 |
選択肢アは、以下のようになります。
従業員番号 | 従業員氏名 |
技能コード | 技能名 | 技能経験年数 |
上の表は、第 3 正規形です。下の表は、「技能コード」から「技能経験年数」に従属性の矢印を引けないので、第 3 正規形ではありません。
選択肢イは、以下のようになります。
従業員番号 | 従業員氏名 | 技能コード | 技能経験年数 |
技能コード | 技能名 |
上の表は、「従業員番号」と「技能コード」に下線が付いているので、これら 2 つの項目が主キーです。このように複数の項目をセットにした主キーを 複合キー と呼びます。
この場合には、複合キー(主キー)から他のすべての項目に従属性の矢印が引ければ、第 3 正規形です。複合キーの一部分だけに従属しているのでは、主キーに従属していることにならないのでダメです。
上の表は、「従業員氏名」が「従業員番号」「技能コード」という複合キーの「従業員番号」だけで特定できるので(赤色の矢印で示しています)、第 3 正規形ではありません。下の表は、第 3 正規形です。
選択肢ウは、以下のようになります。
従業員番号 | 技能コード | 技能経験年数 |
従業員番号 | 従業員氏名 |
技能コード | 技能名 |
どの表も第 3 正規形になっているので、選択肢ウが正解です。
念のため、選択肢エも見ておきましょう。以下のようになります。
従業員番号 | 技能コード |
従業員番号 | 従業員氏名 | 技能経験年数 |
技能コード | 技能名 |
上の表は、主キーだけですが、これも第 3 正規形です。
真ん中の表は、「従業員番号」から「技能経験年数」に従属性の矢印を引けないので、第 3 正規形ではありません。下の表は、第 3 正規形です。
いかがでしょう? 第 3 正規形かどうかは、従属性の矢印を引けばわかる ということをご理解いただけましたね!
解答ウ
関係データベースの正規化に関する午後問題
「第 3 正規形」とは何かを理解できたら、残りの「非正規形」「第 1 正規形」「第 2 正規形」「繰り返し」「部分従属性」「推移従属性」も一気に片付けちゃいまいしょう。
「繰り返し」「部分従属性」「推移従属性」は、これがあってはダメですよ、というものです。
- 繰り返しとは
- 表に、同じ項目が複数あることです
- 部分従属性とは
- 表に、複合キーの一部に従属した項目があることです(先ほどの午前問題にもありました)
- 推移従属性とは
- 表に、主キーではない項目に従属した項目があることです
以下に、それぞれの例を示します。これがあってはダメですよ、を赤色の文字や矢印で示しています。
繰り返しの例
従業員 番号 | 従業員 | 氏名技能名 | 技能名 | 技能名 |
繰り返しがある
部分従属性の例
従業員番号 | 技能コード | 従業員氏名 | 技能経験年数 |
複合キーの一部に従属した項目がある
推移従属性の例
従業員番号 | 従業員氏名 | 部署番号 | 部署名 |
主キーではない項目に従属した項目がある
「繰り返し」「部分従属性」「推移従属性」の有無によって、「非正規形」「第 1 正規形」「第 2 正規形」および「第 3 正規形」が、以下のように定義されています。
これは、この記事の冒頭で示した教科書通りの堅苦しい説明と同じですが、今なら、すんなり理解できるでしょう。
- 非正規形
- 繰り返しがある表
- 第 1 正規形
- 繰り返しを排除した表
- 第 2 正規形
- 第 1 正規形の条件を満たし、さらに部分従属性を排除した表
- 第 3 正規形
- 第 2 正規形の条件を満たし、さらに推移従属性を排除した表
それでは、知識の総仕上げとして、関係データベースの正規化に関する午後問題を見てみましょう。問題文の冒頭には、長々とした説明がありますが、それをざっと読んだら、設問を見てください。
コールセンターの対応記録管理に関する次の記述を読んで,設問 1 ~ 4 に答えよ。
F 社では,新しいソフトウェア製品の発売と同時に,そのソフトウェア製品に関する質問を受けるコールセンターを開設することにした。コールセンターでの対応内容は,すべてデータベースに記録する。
[コールセンターの業務]
- (1)
- 製品を購入した利用者には,一意な利用者 ID が発行されている。質問を受ける際は,この利用者 ID を通知してもらう。
- (2)
- 対応内容をデータベースに記録する際,その質問の原因を特定する種別を設定する。種別とは “マニュアル不備” ,”使用法誤解” などの情報である。それぞれの種別に対して一意に種別 ID を割り当てる。
- (3)
- データベースを検索し,過去に同じ種別 ID をもつ類似の質問があった場合は,その受付番号を類似受付番号として記録しておく。
図 1 は,これらの業務を基に,データベースを構成するデータ項目を抽出したものである。下線付きの項目は主キーを表す。

設問 1
図 1 に示したデータ項目を正規化して図 2 に示す表を設計し,運用を始めた。 実施した正規化に関する説明文のに入れる正しい答えを,解答群の中から選べ。

図 1 に示した状態は非正規形と呼ばれ,1 事実 1 か所の関係が成立していないので,重複更新,事前登録,関係喪失などの問題がある。このため,第 1 正規化 から順に第 3 正規化までを行うことにした。
まず,第 1 正規化の作業では, a 。次に,第 2 正規化の作業では, b。そして,第3正規化の作業では, c。
解答群
- ア
- 受付番号と類似受付番号の組合せを主キーとして 繰返し要素を排除した
- イ
- 既に当該正規形に準じていたので,適用は不要だった
- ウ
- データ参照時の処理性能を考慮し,質問と回答を一つの表で管理するようにした
- エ
- 利用者表,サポート員表及び種別表を作成し,主キー以外の項目における関数従属性を排除した
- オ
- 類似表を作成し,主キーの一部における関数従属性を排除した
「第 1 正規化」とは、繰り返しを排除して第 1 正規形にすることです。
したがって、aの正解は、「繰返し要素を排除した」とある選択肢アです。
「第 2 正規化」とは、部分従属性を排除して第 2 正規形にすることです。
したがって、bの正解は、「主キーの一部における関数従属性を排除した」とある選択肢オです。「関数従属性」は、「従属性」と同じ意味です。
「第 3 正規化」とは、推移従属性を排除して第 3 正規形にすることです。
したがって、cの正解は、「主キー以外の項目における関数従属性を排除した」とある選択肢エです。
解答 a – ア, b – オ, c – エ
いかがでしたか? 「主キーから他の項目に従属性の矢印を引くこと」で、第 3 正規形かどうかを判断できるようになりましたね。
「部分従属性や推移従属性のよけいな矢印が引けること」や「繰り返しがあること」から、第 2 正規形、第 1 正規形、非正規形も判断できますね。
この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう!
label 関連タグ免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
※独習ゼミは、受験ナビ運営のSEプラスによる試験対策eラーニングです。

基本情報でわかる IPアドレス と サブネットマスク
update
基本情報でわかる ホワイトボックステスト
update
基本情報でわかる トランザクション
update
基本情報でわかる コンパイラ 最適化
update
基本情報でわかる CRC 「具体例を見て体験すれば仕組みがわかる」
update
基本情報でわかる 浮動小数点 「3つの情報で1つの数を表す仕組みを知れば、浮動小数点数がわかる」
update
基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」
update
基本情報でわかる 7セグメントLED 「 1 と 0 を書き込めば点灯するパターンがわかる」
update
基本情報でわかる 論理演算 「真理値表を書けば、半加算器と全加算器の仕組みがわかる」
update
基本情報でわかる SMTP / POP3 「ITエンジニア視点で見れば役割がわかる」
update
『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数