関数従属性とは?
関数従属性とは、テーブルの列の関係を表すものであり、「(列)Aが(列)Bに関数従属」は「Bの値が定まれば、対応するAの値は一意に定まる」という意味です。
テーブルの正規化を行う・判断する際に、関数従属の理解は必要です。
関数従属性の洗い出し
関係スキーマ(列全体のイメージ)に存在する関数従属性を全て洗い出す事を考えます。つまり、(与えられた関数従属性の集合をFと表記した時に、)Fに加えて「Fの情報から導ける(※1)関数従属性全て」も含めた集合F+(※2)を得る事を考えます。
結論
F+を得る事に関して、「アームストロングの公理系」が知られています。
その公理系は「健全性」と「完全性」という性質があり、結論としては「アームストロングの公理系を用いる事で、FからF+を作れる」(つまり関数従属性を洗い出せる)事が知られています。
(※1)Fから関数従属性Aを導ける時、「FはAを論理的に含意」と表現されます。
(※2)そのような集合を「Fの閉包」といい、一般に「F+」と表記されます。
上記結論に登場する用語
- アームストロングの公理系
- 反射律: 任意の列集合Xについて、「Xの一部」は「X」に関数従属する。
- 増加率:「YはXに関数従属する」ならば、任意の列Zについて「YZはXZに関数従属する」。
- 推移律;「YはXに関数従属する」且つ「ZはYに関数従属する」ならば、「ZはXに関数従属する」。
- 健全性
- 対象公理系について、「そこから導出される全ての関数従属性は、Fが論理的に含意」を意味する。
- 完全性
- 「F+(Fの閉包)の全ての関数従属性は、対象公理系で導出可能」を意味する。