推移的関数従属 (スイイテキカンウスウドウゾク) とは | 意味や読み方など丁寧でわかりやすい用語解説
推移的関数従属 (スイイテキカンウスウドウゾク) の読み方
日本語表記
推移的関数従属 (スイテキカン スウジョウソウ)
英語表記
transitive functional dependency (トランジティブファンクショナルディペンデンシー)
推移的関数従属 (スイイテキカンウスウドウゾク) の意味や用語解説
推移的関数従属とは、データベースの正規化において重要な概念の一つであり、非キー属性が主キー以外の別の非キー属性に依存する状態を指す。これは、データに冗長性をもたらし、更新異常(挿入異常、更新異常、削除異常)の原因となるため、第三正規形(3NF)を満たすためには解消する必要がある。 データベースにおける関数従属は、ある属性Xの値が決まれば、別の属性Yの値が一意に決定される関係を意味し、「X → Y」と表記される。推移的関数従属は、この関数従属が「X → Y」かつ「Y → Z」であるとき、「X → Z」という関係が成立する状態を指すが、ここで重要なのはYがテーブルの候補キーではないという点である。もしYが候補キーであるならば、それは推移的関数従属とはみなされない。つまり、主キーから非キー属性へ、さらにその非キー属性から別の非キー属性へと、まるで連鎖的に依存関係が移り変わるような構造が推移的関数従属である。 詳細を説明するため、具体的な例を挙げる。例えば、社員の情報と所属する部署の情報が一つのテーブル「社員テーブル」に格納されているとする。このテーブルには、「社員ID(主キー)」、「社員名」、「部署ID」、「部署名」、「部署所在地」といった属性が含まれている。 この「社員テーブル」における関数従属の関係を見てみる。 まず、「社員ID」が決まれば、「社員名」、「部署ID」、「部署名」、「部署所在地」は一意に決まる。これは「社員ID → 社員名, 部署ID, 部署名, 部署所在地」という関数従属である。 次に、「部署ID」が決まれば、「部署名」と「部署所在地」は一意に決まる。これは「部署ID → 部署名, 部署所在地」という関数従属である。 ここで、「部署ID」は「社員テーブル」の主キーである「社員ID」ではない。また、「部署ID」はテーブル全体から見ても候補キーではない(例えば、社員IDが異なっても同じ部署IDを持つ社員は複数存在しうるため、部署IDだけでは社員を一意に特定できない)。 このような状況で、「社員ID → 部署ID」という関数従属があり、さらに「部署ID → 部署名」という関数従属があるとき、「社員ID → 部署名」は推移的関数従属であると判断される。同様に、「社員ID → 部署所在地」も推移的関数従属である。非キー属性である「部署名」や「部署所在地」が、主キーである「社員ID」に直接従属するのではなく、主キーではない別の非キー属性「部署ID」を介して間接的に従属している状態が推移的関数従属の本質である。 推移的関数従属が存在すると、以下のような更新異常が発生する可能性が生じる。 1. **挿入異常**: 新しい部署の情報を登録したいが、その部署にまだ社員が一人もいない場合、主キーである「社員ID」がNULLになってしまうため、新しい部署の情報を登録できない。これは、部署の情報(部署名、部署所在地)が社員の情報に依存してしまっているためである。 2. **更新異常**: ある部署の「部署名」や「部署所在地」が変更になったとする。このとき、その部署に属する全ての社員のレコードにおいて、「部署名」や「部署所在地」の値を更新しなければならない。もし、一部のレコードの更新を忘れてしまうと、同じ部署IDを持つ社員間で「部署名」や「部署所在地」が異なるというデータの不整合が発生する。 3. **削除異常**: ある部署に所属する最後の社員が退職し、その社員のレコードをテーブルから削除したとする。すると、その社員が所属していた部署に関する情報(「部署名」や「部署所在地」)も一緒に失われてしまう可能性がある。これは、部署の情報が社員のレコード内に冗長に格納されているためである。 これらの問題は、データが冗長であり、データの整合性を維持することが困難になることを示している。推移的関数従属を解消するためには、テーブルを分割するという正規化の手順を踏む必要がある。 上記の例の場合、「社員テーブル」を以下の二つのテーブルに分割する。 * **社員テーブル**: 「社員ID(主キー)」、「社員名」、「部署ID(外部キー)」 * **部署テーブル**: 「部署ID(主キー)」、「部署名」、「部署所在地」 この分割により、元の「社員テーブル」に存在していた「部署名」と「部署所在地」は「部署テーブル」に移され、「部署ID」を介して両テーブルが関連付けられる。 この構造では、「社員ID → 部署名」や「社員ID → 部署所在地」といった推移的関数従属は解消される。社員テーブルの主キーである「社員ID」は「社員名」と「部署ID」に直接従属し、「部署ID」は「部署テーブル」の主キーとして「部署名」と「部署所在地」に直接従属する。これによって、各テーブルは第三正規形を満たす状態となり、上記のような更新異常は発生しなくなる。例えば、新しい部署の情報を、まだ社員がいなくても「部署テーブル」に登録できるようになる。部署情報の変更も「部署テーブル」内の該当レコードを一度更新するだけで済む。社員の退職によって部署の情報が失われることもなくなる。 このように推移的関数従属の解消は、データベースの設計においてデータの整合性を保ち、効率的なデータ管理を実現するために不可欠なステップである。