関数従属性とは
関数従属性(Functional Dependency: FD)とは、
関係データベースにおける重要な概念の一つで、ある属性集合の値が別の属性集合の値を一意に決定する関係のことを指します。これはデータベースのテーブル(関係)において、データ間の依存関係を明確にするための制約として用いられます。
関数従属性の定義
関係Rにおいて、属性の集合Xの値が、属性の集合Yの値を一意に決定する場合、「XはYを関数的に決定する」といい、`X → Y`と表記します。
- - 決定項 (Determinant): `X → Y`におけるXを指します。この値が決まればYの値が一意に定まるため、決定項と呼ばれます。
- - 従属項 (Dependent): `X → Y`におけるYを指します。Xの値に依存して値が決まるため、従属項と呼ばれます。
例えば、あるテーブルで「社員ID」がわかれば「社員名」が一意に決まる場合、「社員ID → 社員名」という関数従属性が存在するといえます。
関数従属性の具体例
自動車のデータベースを例に考えてみましょう。
- - 車台番号 → 排気量: 車台番号がわかれば、その自動車の排気量は一意に決まります。これは関数従属性が成立する例です。
- - 排気量 → 車台番号: 同じ排気量の車は複数存在するため、排気量がわかっても車台番号は一意に決まりません。これは関数従属性が成立しない例です。
この例から、関数従属性は一方向の関係であり、可逆的ではないことがわかります。
自明な関数従属性
関数従属性 `X → Y` において、YがXの
部分集合である場合、その関数従属性は自明な関数従属性と呼ばれます。 例えば、Xが{A, B}でYが{A}の場合、`{A, B} → {A}`という関数従属性は常に成立するため自明です。
関数従属性は、データベースの設計(
データモデリング)において、特に正規化の過程で重要な役割を果たします。正規化とは、データの重複を排除し、データの整合性を保つためのプロセスです。
正規化と関数従属性
データベースを設計する際には、適切なテーブル設計を行うことが重要です。関数従属性は、テーブルを分解(正規化)する際の基準となります。
例えば、以下のような関数従属性があるとします。
- - 車台番号 → 車両モデル
- - 車両モデル → 排気量
この場合、これらの関数従属性から、
車台番号から排気量が推移的に決定されることがわかります。
この推移的な従属性は、テーブル設計において冗長性や更新時の矛盾を引き起こす原因となるため、正規化によってテーブルを分割し、これらの問題に対処します。
候補キーとは、テーブル内の行を一意に識別できる最小の属性集合です。関数従属性は
候補キーの特定にも役立ちます。なぜなら、
候補キーはテーブルの全ての属性を関数的に決定する最小の属性集合だからです。
例えば、
車台番号がわかれば、その車の全ての情報(車両モデル、排気量、など)が一意に決まるので、
車台番号は
候補キーとなります。
関数従属性の特性
関数従属性にはいくつかの重要な特性があり、これらはアームストロングの規則として知られています。これらの規則は、関数従属性の推論や正規化において非常に役立ちます。
アームストロングの規則
1.
部分集合の特性 (反射律): YがXの
部分集合であるならば、`X → Y`が成立します。
2.
増加の規則: `X → Y`が成立するならば、`XZ → YZ`が成立します。
3.
推移律: `X → Y` かつ `Y → Z`が成立するならば、`X → Z`が成立します。
これらの規則から、以下の規則を導き出すこともできます。
- - 結合: `X → Y` かつ `X → Z` ならば、`X → YZ` が成立します。
- - 分解: `X → YZ` ならば、`X → Y` かつ `X → Z` が成立します。
- - 疑似的な推移性: `X → Y` かつ `YZ → W` ならば、`XZ → W` が成立します。
関数従属性の既約な集合
関数従属性の集合Sは、以下の3つの特性を持つとき、既約であると言えます。
1. S内の各関数従属性の従属項が単一の属性である。
2. S内の各関数従属性の決定項が既約である(決定項から属性を一つでも削除すると、Sの内容が変わる)。
3. S内の関数従属性を一つでも削除すると、Sの内容が変わる。
まとめ
関数従属性は、データベースの設計において、データ間の関係を正しく定義し、正規化を行う上で不可欠な概念です。適切に理解し、活用することで、効率的で信頼性の高いデータベースを構築することができます。アームストロングの規則を理解することで、関数従属性に基づいた推論や正規化をスムーズに行うことが可能です。