関係モデルと正規化理論(第1〜第3正規形・BCNFと関数従属の導出)のサムネイル
ガイドDB

関係モデルと正規化理論(第1〜第3正規形・BCNFと関数従属の導出)

公開: 2026-10-05更新: 2026-10-06
関数従属から候補キーを求め、1NF・2NF・3NF・BCNFを判定する手順を解説。無損失分解と従属性保存の違いを、具体的な関係スキーマで確認します。

正規化は、業務上の依存関係を表の構造に反映し、同じ事実の重複記録に伴う更新・挿入・削除の異常を減らす手順です。列名や現在のサンプル行だけで従属を決めず、許されるすべてのデータ状態について成立する業務ルールを根拠にします。

関数従属と属性閉包からキーを求める

X→Yは、Xの値が同じならYの値も同じになることを表します。Xが1列とは限りません。社員番号→氏名が成立しても、氏名→社員番号は通常成立しません。サンプルに同姓同名がいないことは、氏名が将来も一意である根拠にはなりません。

属性集合Xから従属を繰り返し適用して得られる属性の集合がXの閉包です。閉包が表の全属性を含めばスーパーキーで、そこから属性を1つでも除くと全属性を決定できなくなるものが候補キーです。主キーは候補キーから選んだ1つにすぎません。いずれかの候補キーに含まれる属性をキー属性、それ以外を非キー属性として判定します。

1NF・2NF・3NF・BCNFの判定

正規形

確認する条件

1NF

各属性値をその表で扱う1つの値として記録する。繰返しの列群や複数項目の詰込みを避ける

2NF

1NFで、非キー属性がいずれの候補キーの真部分集合にも従属しない

3NF

非自明な従属X→Aごとに、Xがスーパーキー、またはAがキー属性である

BCNF

非自明な従属X→Aごとに、Xがスーパーキーである

「単一主キーだから必ず2NF」とは、ほかにも複合候補キーがある場合には言い切れません。第3正規形も「主キーからの推移的従属がない」という簡略表現だけでなく、右辺が候補キーの一部となる例外を確認します。

注文の例で部分従属と推移的従属を分ける

表R(注文番号, 明細番号, 注文日, 商品コード, 商品名, 数量)を考えます。注文番号→注文日、商品コード→商品名、(注文番号, 明細番号)→商品コード・数量が成立し、ほかに候補キーはないものとします。注文日は複合キーの一部である注文番号に従属するため、2NF違反です。

まず注文(注文番号, 注文日)と明細(注文番号, 明細番号, 商品コード, 商品名, 数量)に分けます。明細には商品コード→商品名が残り、商品コードはスーパーキーではなく商品名は非キー属性なので3NF違反です。商品(商品コード, 商品名)を分けて、明細から商品名を除きます。商品コードが候補キーの一部ではないこの例で、商品名の従属を「部分従属」と呼ばないようにします。

注文データの分解各表で何を1件として記録するかを明確にします。分解は業務上の従属が成立することを前提とします。分解前分解後123注文・明細・商品注文注文明細商品
注文データの分解
  1. 1. 注文番号で注文日を決定
  2. 2. 注文番号と明細番号で識別
  3. 3. 商品コードで商品名を決定

各表で何を1件として記録するかを明確にします。分解は業務上の従属が成立することを前提とします。

3NFでもBCNFではない例

R(学生S, 科目C, 教員I)で、SC→IとI→Cが成立し、ほかに独立した従属はないとします。候補キーはSCとSIです。I→Cの左辺Iはスーパーキーではありませんが、右辺Cはキー属性なので3NFを満たし、BCNFは満たしません。

(I,C)と(S,I)へ分解すると、共通属性Iが前者を決定するため無損失です。しかし「同じ学生・科目に教員は1人」というSC→Iは、分解した各表の制約だけでは検査できません。無損失性と従属性保存を混同せず、元の制約をどこで検査するかを考えます。アプリケーションの事前確認だけでは並行登録を防げない場合があるため、排他制御や直列化を含めて設計します。

演習1:部分従属を判定する

条件:キーは(注文番号,明細番号)だけ。注文番号→注文日、商品コード→商品名が成立する。

問い:2NF違反を直接示す従属はどれか。

解答例:注文番号→注文日。

根拠:非キー属性の注文日がキーの真部分集合に従属する。商品名は、このキーに対しては商品コードを介する推移的従属として扱う。

演習2:分解の代償

条件:R(S,C,I)を(I,C)と(S,I)へ無損失に分解した。SC→Iは各表の制約だけでは保証できない。

問い:分解後に別途検査すべき業務制約を説明しよう。(35字以内)

解答例:同じ学生と科目に複数の教員を割り当てない。(21字)

根拠:同じ科目の異なる教員を同じ学生に登録できると、元のSC→Iが壊れる。

復習で確かめること

例の数値や業務条件を変えて同じ結論になるか確認してください。用語の定義だけでなく、問題文のどの条件から、どの制約・SQL・対策を選んだのかを自分の言葉で説明できれば、次の過去問に進みます。

出典と仕様を確認する

IPA:DBシラバス Ver.4.1

Database System Concepts 著者公開資料:関係データベース設計

関連するテーマ

高度な正規化理論(第4・第5正規形・多値従属・無損失分解)

分散データベースと2相コミット(2PC)・CAP定理

次におすすめの学習

この記事を共有する

編集・検証について

編集・検証:IT資格ラボ編集部

IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。

編集方針・情報源・訂正方針を見る