関数従属とは?初心者でもわかるデータベースの基本と例
生徒
「先生、データベースを勉強していたら『関数従属』という言葉が出てきました。これはどういう意味ですか?」
先生
「関数従属(カンスウジュウゾク)というのは、ある列の値が決まれば、他の列の値も一意に決まるという関係のことなんだ。」
生徒
「一意に決まるってどういうことですか?」
先生
「例えば『社員ID』を見れば必ずその人の『氏名』が分かるような場合だね。社員IDから氏名が決まるという関係が関数従属なんだよ。」
生徒
「なるほど!つまりあるデータが別のデータを決定する関係を指すんですね。」
先生
「その通り。それじゃあ、詳しく説明していこう。」
1. 関数従属(カンスウジュウゾク)とは?
関数従属とは、データベースにおいて「ある列の値を決めれば、別の列の値が必ず決まる」という関係を表す用語です。英語では「Functional Dependency(ファンクショナルディペンデンシー)」と呼ばれます。
例えば「社員ID」から「社員名」が決まる場合、社員ID → 社員名 という関数従属が成り立ちます。この矢印は「決定する」という意味を表しています。
2. 関数従属の具体例
次のような表を考えてみましょう。
社員ID | 氏名 | 部署ID | 部署名
001 | 佐藤 | D01 | 営業
002 | 鈴木 | D01 | 営業
003 | 田中 | D02 | 開発
この表では以下の関数従属が成り立ちます。
- 社員ID → 氏名
- 社員ID → 部署ID
- 部署ID → 部署名
つまり「社員ID」が分かれば「氏名」や「部署ID」が決まりますし、「部署ID」が分かれば「部署名」も決まります。
3. 完全関数従属と部分関数従属
関数従属には種類があります。その中で重要なのが「完全関数従属(カンゼンカンスウジュウゾク)」と「部分関数従属(ブブンカンスウジュウゾク)」です。
完全関数従属とは、複合キー全体によって決まる関係のことです。一方、部分関数従属は複合キーの一部だけで値が決まってしまう関係です。
例えば、注文表で「注文番号」と「商品番号」の2つをキーにしている場合、「商品名」が商品番号だけで決まるなら、それは部分関数従属です。こうした部分関数従属を排除するのが第2正規形の考え方です。
4. 推移的関数従属(スイイテキカンスウジュウゾク)とは?
推移的関数従属とは、キーを通して間接的に別の列に依存する関係を指します。
例を挙げると、「社員ID → 部署ID」「部署ID → 部署名」という関係があるとき、「社員ID → 部署名」も成り立ちます。このように間接的に依存する関係を推移的関数従属といいます。
推移的関数従属を解消するのが第3正規形の目的です。
5. 関数従属が重要な理由
関数従属を理解することは、データベース設計を正しく行ううえで欠かせません。なぜなら関数従属を考慮せずに設計すると、データの重複や矛盾が発生しやすくなるからです。
正規化(セイキカ)は関数従属の考え方をもとに表を整理していく手法です。非正規形から第1正規形、第2正規形、第3正規形へと整理する過程で、関数従属の理解が必須になります。
6. 関数従属に関する雑学
関数従属という考え方は、1970年代にエドガー・F・コッドによって提唱されたリレーショナルデータベース理論の中で生まれました。当時、データが重複して扱いにくいという問題を解決するために、関数従属を基準にした正規化の方法が整えられたのです。
初心者は「Aを知ればBが必ず分かる」というイメージで関数従属を捉えると理解しやすいでしょう。例えば「学生番号 → 学生氏名」というように、日常のデータ管理でも自然に使われている考え方です。