関数従属性(functional dependency)は、リレーショナルデータベース(RDB)の設計において重要な概念です。本記事では、関数従属性の定義、例、種類、そして正規化との関連性について詳しく解説します。
関数従属性の基本概念
定義
関数従属性とは、リレーショナルデータベースにおいて、2つの属性の間で一方の値を決定することにより、もう一方の値が一意に決まる性質のことを指します。
この関係を理解することで、データベースの設計や最適化が容易になります。
例を挙げてみましょう
例えば、社員名簿のテーブルで「社員ID」があれば、「氏名」は一意に決まります。
この場合、「社員ID」が決定項、そして「氏名」が従属項です。この関係は「社員ID→氏名」と表記されます。
同姓同名の可能性を考慮すると、逆の関係は成り立ちません。
複合主キーと関数従属性
複合主キーの例
例えば、「注文番号」と「商品ID」を組み合わせて複合主キーを構成するテーブルがあります。
この場合、注文番号と商品IDの値の組み合わせに対して、「商品名」や「数量」がそれぞれ従属します。
この関係は「{注文番号, 商品ID}→商品名」や「{注文番号, 商品ID}→数量」となります。
部分関数従属と完全関数従属
ここで、「商品名」は「商品ID」によって決まるため、「商品ID→商品名」という関係も成立します。
これは部分関数従属です。一方で、「数量」は両方の値が必要で、これを完全関数従属と言います。
推移的関数従属
推移的関数従属の例
例えば、「社員ID」「氏名」「住所」「郵便番号」というテーブルでは、「社員ID→住所」が成り立ちます。
さらに、「住所」が決まると「郵便番号」も一意に決まるため、「住所→郵便番号」も成立します。
この場合、「社員ID→郵便番号」という従属性が成立し、「郵便番号」は「社員ID」に推移的関数従属しています。
正規化と関数従属性
正規化の重要性
リレーショナルデータベースの設計において、冗長性や不整合を排除する手法が正規化です。
正規化の段階は第1正規形、第2正規形、第3正規形などがありますが、第2正規形以降は項目間の関数従属性に従って関係を整理します。
これにより、データの整合性が保たれます。
まとめ
関数従属性はリレーショナルデータベースの設計において欠かせない概念であり、データの整合性や冗長性の管理に重要です。
この記事で紹介した関数従属性の理解を深めることで、より効果的なデータベース設計が可能となるでしょう。
さらに参考してください。