関数従属性 (カン スウ ジュウゼンセ) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

関数従属性 (カン スウ ジュウゼンセ) の読み方

日本語表記

関数従属 (カン スウ ジュウゾク)

英語表記

functional dependency (ファンクショナル・ディペンデンシー)

関数従属性 (カン スウ ジュウゼンセ) の意味や用語解説

関数従属性とは、関係データベースのテーブル(リレーション)において、ある属性(または属性の集合)の値が決まると、別の属性(または属性の集合)の値も一意に決まるというデータ間の関連性を指す。この関係は「AがBを関数決定する」または「BはAに関数従属する」と表現され、Aを決定項、Bを被決定項と呼ぶ。例えば、社員IDという属性が分かれば、その社員の氏名も一意に特定できる場合、氏名は社員IDに関数従属すると言える。これは、同じ社員IDを持つ複数の社員名が存在しないことを意味し、データベース内のデータが一貫している状態を示す。関数従属性は、単一の属性だけでなく、複数の属性の組み合わせによって他の属性が決まる場合にも適用される。この概念を理解することは、テーブルの構造を適切に設計し、データの冗長性を排除するための第一歩となる。 関数従属性は、より具体的に、ある属性Xの集合が別の属性Yの集合を一意に決定できる場合に「X → Y」と記述される。この「→」は「関数決定する」という意味を持つ。例えば、顧客テーブルに顧客ID、顧客名、住所という属性があるとする。この場合、顧客IDが決まれば顧客名は一意に決まるので「顧客ID → 顧客名」という関数従属性が存在する。同様に「顧客ID → 住所」も関数従属性となる。 関数従属性にはいくつかの種類があり、それぞれデータベースの正規化において重要な役割を果たす。 第一に、**完全関数従属性**がある。これは、複合候補キー(複数の属性からなる候補キー)の全体が非キー属性を関数決定する場合を指す。例えば、ある受注明細テーブルに「受注ID」「商品ID」「数量」という属性があるとする。このテーブルの候補キーは「(受注ID, 商品ID)」の組み合わせであり、この組み合わせによって「数量」が一意に決まる。しかし、「受注ID」単独では「数量」は決まらず、「商品ID」単独でも「数量」は決まらない。このように、非キー属性が候補キーのどの部分にも関数従属せず、候補キーの全体にのみ関数従属している状態を完全関数従属性と呼ぶ。 第二に、**部分関数従属性**がある。これは、非キー属性が候補キーの一部のみに関数従属している場合を指す。上記の受注明細テーブルの例で、もし「商品名」という属性があり、「商品ID → 商品名」という関数従属性が存在すると仮定する。この場合、「商品名」は複合候補キーである「(受注ID, 商品ID)」の一部である「商品ID」に関数従属しているため、部分関数従属性が存在すると言える。部分関数従属性が存在すると、データに冗長性が生じ、更新異常(データの更新、挿入、削除時に矛盾が生じる現象)が発生しやすくなる。例えば、同じ商品IDの商品でも、受注明細ごとに商品名を変更した場合、データの一貫性が失われる可能性がある。 第三に、**推移関数従属性**がある。これは、非キー属性が、主キーではない別の非キー属性を介して主キーに従属している場合を指す。例えば、社員テーブルに「社員ID」「部門ID」「部門名」という属性があるとする。「社員ID」が主キーであり、「社員ID → 部門ID」という関数従属性が存在する。さらに「部門ID → 部門名」という関数従属性も存在する。このとき、「社員ID → 部門名」という関数従属性は「社員ID → 部門ID → 部門名」という推移的な経路をたどって成立している。部門名が主キーである社員IDに直接従属せず、非キー属性である部門IDを介して従属している状態が推移関数従属性である。推移関数従属性もまた、部分関数従属性と同様にデータ冗長性や更新異常の原因となる。例えば、ある部門の部門名を変更する場合、その部門に所属する社員の数だけレコードを更新する必要が生じる。 関数従属性を理解し、適切に識別することは、データベースの**正規化**を行う上で極めて重要である。正規化とは、データベースのデータ構造を整理し、冗長性を排除してデータの整合性を高めるプロセスだ。第2正規形は部分関数従属性の排除を目指し、第3正規形は推移関数従属性の排除を目指す。これらの正規化の段階を適用することで、データの格納効率が向上し、データの矛盾を防ぎ、更新、挿入、削除時の異常発生を抑制できる。結果として、データの一貫性が保証され、データベースの信頼性と保守性が向上する。 システムエンジニアがデータベースを設計する際、まずデータ間の関数従属性を正確に洗い出すことから始める。これにより、テーブルをどのように分割し、どの属性を主キーや外部キーとして設定すべきか、といった設計上の重要な意思決定を行うことができる。関数従属性は、単なる理論的な概念ではなく、現実のデータベースシステムにおいて堅牢で効率的なデータ管理を実現するための、実践的な基盤となるのだ。適切な関数従属性の分析は、変更に強く、拡張しやすいデータベース構造を構築するために不可欠なスキルである。

関数従属性 (カン スウ ジュウゼンセ) とは | 意味や読み方など丁寧でわかりやすい用語解説