関数従属(完全・部分・推移)は、データベースの正規化を理解するうえで避けて通れない概念です。
この記事では、3種類の関数従属の違いを日常の例え話と図解で整理し、応用情報技術者試験で得点できる状態を目指します。
対象試験と出題頻度
関数従属は、応用情報技術者で出題されるテーマです。
正規化の手順を問う問題の前提知識として登場し、「第2正規形」「第3正規形」への変換理由を正しく説明できるかが問われます。
詳細をクリックして確認
応用情報技術者
★★☆☆☆
ランクC(応用)余裕があれば覚える
用語の定義
情報処理試験を勉強していると、「関数従属って何?完全とか部分とか推移とか、何が違うの?」と混乱しがちです。
関数従属(Functional Dependency)とは、一言で言うと
「ある属性の値が決まると、別の属性の値が一意に決まる関係」
のことです。
イメージとしては、「社員番号から社員名を引ける社員名簿」です。
社員番号が決まれば、社員名は1人に定まります。
逆に同じ社員番号に2人の名前がひも付くことはありません。この「番号→名前」の一対一の決定関係が関数従属です。
そして、この関数従属には3つのタイプがあります。正規化の段階と直結するため、それぞれの違いを正確に押さえることが重要です。
📊 関数従属の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Functional Dependency |
| 記法 | X → Y(Xが決まるとYが一意に決まる) |
| 3つのタイプ | 完全関数従属・部分関数従属・推移的関数従属 |
| 関連する概念 | 正規化(第1〜第3正規形) |
解説
関係データベースでは、テーブル内のデータの冗長性(同じ情報の重複)が更新時の不整合を引き起こします。この冗長性を段階的に取り除く作業が正規化であり、正規化の各段階で排除対象となるのが「部分関数従属」と「推移的関数従属」です。
つまり、関数従属の3タイプを区別できなければ、正規化の手順を正しく理解できません。
完全関数従属(Full Functional Dependency)
完全関数従属とは、複合主キー全体に対してのみ値が決まる関係です。主キーの一部だけでは値が決まりません。
日常の例で言えば、「学校名+クラス名」の2つが揃って初めて担任教師が決まる状態です。学校名だけでもクラス名だけでも担任は特定できません。
完全関数従属のイメージ
▲ 主キー全体(受注番号+商品コード)が揃わないと「数量」は決まらない
※ 片方だけでは決まらない → だから「完全」関数従属
部分関数従属(Partial Functional Dependency)
部分関数従属とは、複合主キーの一部だけで値が決まってしまう関係です。
これは第2正規化で排除する対象です。
先ほどの受注テーブルで、「商品コード」だけで「商品名」が決まるなら、「商品名」は主キーの一部にしか依存していません。これが部分関数従属です。
部分関数従属のイメージ
▲ 主キーの一部(商品コードだけ)で「商品名」が決まる → 部分関数従属
推移的関数従属(Transitive Functional Dependency)
推移的関数従属とは、主キー → 非キー属性A → 非キー属性B のように、非キー属性を経由して間接的に値が決まる関係です。これは第3正規化で排除する対象です。
例えば、社員テーブルで「社員番号 → 部門コード → 部門名」となっている場合、「部門名」は主キーから直接ではなく「部門コード」を中継して決まっています。
推移的関数従属のイメージ
▲ 非キー属性(部門コード)を中継して「部門名」が決まる → 推移的関数従属
3種類の比較と正規化との対応
ここだけは確実に押さえてください。3つの関数従属は、それぞれ正規化の段階と1対1で対応します。
| 関数従属の種類 | 意味 | 排除する正規化 | 操作 |
|---|---|---|---|
| 完全関数従属 | 主キー全体に対してのみ値が決まる | —(理想状態) | 排除不要。第2正規形の条件 |
| 部分関数従属 | 主キーの一部だけで値が決まる | 第2正規化 | 該当属性を別テーブルに分離 |
| 推移的関数従属 | 非キー属性を経由して間接的に値が決まる | 第3正規化 | 該当属性を別テーブルに分離 |
図解:正規化の流れと関数従属の関係
非正規形から第3正規形まで、どの段階で何を排除するかを一枚で整理します。
正規化の流れと排除対象
※ 各段階は下位の正規形の条件をすべて含む
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 関数従属の核心を3行で
・「X → Y」=Xが決まるとYが一意に決まる関係
・部分関数従属(主キーの一部で決まる)→ 第2正規化で排除
・推移的関数従属(非キー属性を経由して決まる)→ 第3正規化で排除
試験ではこう出る!
関数従属そのものが単独で問われるケースは少なく、正規化の手順や正規形の判定問題の中で前提知識として登場します。
出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP R7春 午前 問26 |
第2正規形から第3正規形への変換手順を選ぶ問題 | ・「候補キー以外の属性間の従属性を分解」が正解 ・第1正規化・第2正規化・BCNF化の説明がひっかけ |
| AP H30秋 午前 問28 |
第1・第2・第3正規形と特徴a〜cの組合せを選ぶ問題 | ・「主キーの真部分集合に従属しない」=第2正規形 ・「推移的に従属しない」=第3正規形 |
| AP H29春 午前 問27 |
表がどのレベルの正規形まで満たしているかを判定する問題 | ・非キー属性間の従属(推移的関数従属)が残っているため第2正規形止まり |
| AP H28春 午前 問27 |
属性a〜eの関係を第3正規形に分解する問題 | ・従属性の矢印記法を読み取り、推移的従属を別表に分離する操作 |
📝 IPA試験での出題パターン
パターン1:「第N正規形への変換手順を選べ」
第2正規化と第3正規化の手順が並列で提示され、正しい組合せを選ぶ形式。「部分従属の排除」と「推移的従属の排除」を取り違えると不正解になる。
パターン2:「この表はどの正規形まで満たしているか」
具体的なテーブルと主キーが提示され、部分従属や推移的従属の有無を判定させる形式。AP H29春 問27がこの典型。
パターン3:「従属性の矢印記法を読み取り分解せよ」
X → Y の記法で従属関係が与えられ、第3正規形に分解した結果を選ぶ形式。AP H28春 問27で出題されている。
試験ではここまででOKです。ボイスコッド正規形や第4・第5正規形まで問われることはほぼないため、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 関係データベースの第2正規化に関する説明として、最も適切なものはどれでしょうか?
- A. 候補キー以外の属性間に存在する従属性を排除し、非キー属性が他の非キー属性を経由せず主キーに直接従属する状態にする。
- B. 主キーの真部分集合に対する従属性を排除し、すべての非キー属性が主キー全体に対してのみ従属する状態にする。
- C. 繰り返し属性や集合値をもつ属性を排除し、すべての属性が単一の値をもつ状態にする。
正解と解説を見る
正解:B
解説:
第2正規化は、複合主キーの一部だけで非キー属性の値が決まってしまう「部分関数従属」を排除する操作です。排除の結果、すべての非キー属性が主キー全体に完全に従属する状態(完全関数従属のみ)になります。
選択肢Aは第3正規化の説明です。第3正規化では非キー属性間の従属性(推移的関数従属)を排除し、主キーから直接従属する形にします。選択肢Cは第1正規化の説明です。第1正規化では繰り返しグループを除去して、各セルに単一の値だけが入る状態にします。
よくある質問(FAQ)
Q. 主キーが1つの属性だけ(単一主キー)の場合、部分関数従属は発生しますか?
発生しません。部分関数従属は「複合主キーの一部で値が決まる」状態を指すため、主キーが1属性しかなければ「一部」が存在しません。そのため、単一主キーのテーブルは自動的に第2正規形の条件を満たします。FE R2 問27でもこの性質を利用した出題がされています。
Q. 「関数従属性」と「関数従属」は同じ意味ですか?
同じ概念を指しています。IPA試験の問題文では「関数従属性」(Functional Dependency)の表記が多く使われますが、教科書や参考書では「関数従属」と略すこともあります。試験で意味の違いが問われることはないため、同義と理解して問題ありません。
Q. 実務では第3正規形まで正規化しないケースもあるのですか?
あります。パフォーマンス上の理由で、あえて正規化を崩す(非正規化する)設計は実務では珍しくありません。例えば、結合(JOIN)の回数を減らして検索速度を上げるために、推移的従属のある状態をそのまま保持するケースがあります。ただし、IPA試験の範囲では正規化の理論が正しく問われるため、「正規化=推奨される設計」として解答してください。
Q. ボイスコッド正規形(BCNF)と第3正規形の違いは何ですか?
第3正規形は「非キー属性が主キーに推移的に従属しない」ことを求めますが、ボイスコッド正規形はさらに厳しく「すべての従属性の決定項が候補キーである」ことを求めます。候補キーが複数存在し重なり合うような特殊なテーブル構造で違いが出ます。応用情報技術者の午前問題では選択肢の1つとしてBCNFが登場することがありますが、BCNFの詳細な定義が問われる頻度は低いため、「第3正規形よりさらに厳しい条件」という位置づけを押さえておけば十分です。