廣瀬製紙株式会社

Employees' Blog

RDBの正規化と関数従属

公開日:2025.02.17 更新日:2025.02.17
データの流れとエンジニアたちのイラスト

リレーショナルデータベースの正規化に関して必ず出てくる関数従属に関して、矢印を使った図解でわかりやすく(?)図示しました。

これによってイメージがつかめた! という方が増えればうれしいです。
なお、テーブルの図において、アンダーラインがついているものが主キーを表しています。

完全関数従属 (Full Functional Dependency)

完全関数従属のテーブル例
学生テーブル

ここでは、学生テーブルの非キー属性である「氏名」と「生年月日」は、主キーである学生IDに対して完全に従属しています。

部分関数従属 (Partial Functional Dependency)

正規化前

部分的関数従属のテーブル例
注文詳細テーブル

ここでは、商品名と単価が、複合主キーの一部である商品IDにのみ依存しています。
つまり、非キー属性が複合主キーの「一部分」に依存しているため、部分関数従属となります。

正規化後

部分的関数従属のテーブル例(正規化後1)
注文詳細テーブル
部分的関数従属のテーブル例(正規化後2)
商品テーブル

こうすることで部分関数従属がなくなり、第二正規形を満たすようになりました。

推移的関数従属 (Transitive Functional Dependency)

正規化前

推移的関数従属のテーブル例
従業員テーブル

この例では、部署名は部署IDに依存し、さらに部署IDは主キーである従業員IDに依存しています。
そのため、従業員IDから部署名への依存は、推移的な関数従属となります。

正規化後

推移的関数従属のテーブル例(正規化後1)
従業員テーブル
推移的関数従属のテーブル例(正規化後2)
部署テーブル

こうすることで推移的関数従属がなくなり、第三正規形を満たすようになりました。