関係データベースの第五正規形を扱う
第五正規形は結合従属をキーから導ける形に分ける
関係データベースの正規化で、本質タプル正規形の次に置く段階が第五正規形 (Fifth Normal Form, 5NF) である。
射影と結合だけを使う正規化の終点としても扱い、射影結合正規形 (Project-Join Normal Form, PJ/NF) とも呼ぶ。
ETNF では、どの行も一部分だけでも全体でも余分にならない。それでも、結合従属が候補キーだけでは導けないことがある。第五正規形は、どの非自明な結合従属でも、射影先がすべて候補キーである状態である。言い換えると、結合従属は候補キーから導ける。
納品表の対応を3つの表へ移す
本質タプル正規形の納品表では、仕入先と部品が揃えば案件は1つに決まる。仕入先と部品、部品と案件、案件と仕入先のどの2列の組も事実なら、3列の組も必ず成り立つ。行を区別する候補キーは (仕入先, 部品) だけである。
| 仕入先 | 部品 | 案件 |
|---|---|---|
| 北商 | ねじ | A工事 |
| 南商 | ねじ | A工事 |
| 北商 | 座金 | A工事 |
結合従属の射影先のうち (仕入先, 部品) は候補キーだが、(部品, 案件) と (案件, 仕入先) は候補キーではない。この結合従属は候補キーだけでは導けない。この表は ETNF だが 5NF ではない。
仕入先と部品、部品と案件、案件と仕入先の対応を、それぞれ別の表へ移す。
仕入先部品の表では、仕入先 と 部品 の組で行が1つに決まる。
| 仕入先 | 部品 |
|---|---|
| 北商 | ねじ |
| 南商 | ねじ |
| 北商 | 座金 |
部品案件の表では、部品 と 案件 の組で行が1つに決まる。
| 部品 | 案件 |
|---|---|
| ねじ | A工事 |
| 座金 | A工事 |
案件仕入先の表では、案件 と 仕入先 の組で行が1つに決まる。
| 案件 | 仕入先 |
|---|---|
| A工事 | 北商 |
| A工事 | 南商 |
3つの表をつなぐと、分ける前の行に戻る。北商のねじは、案件が A工事になる。
第五正規形でも定義域だけの制約は残る
表を分けると、値の直し方と追加の仕方が単純になる。
- 北商とねじの組を消すときは、仕入先部品の表の1行を消せばよい。案件の数だけ行を消す必要はない。
- まだ案件と結びついていない仕入先と部品の組も、仕入先部品の表へ追加できる。
- ある案件の行をすべて消しても、仕入先と部品の対応は仕入先部品の表に残る。
ここまでの表では、各表の候補キーは2列すべてである。非自明な結合従属の射影先は、いずれもその表の候補キーになる。結合従属は候補キーから導けるので、これらの表は 5NF である。
分けたあとも、列の取りうる値の範囲など、キーだけでは書けない条件が残ることがある。次の部品表は 5NF である。
| 部品 | 種別 |
|---|---|
| ねじ | 締結 |
| 座金 | 締結 |
行を区別する候補キーは 部品 だけである。関数従属も結合従属も、候補キーから導ける。それでも、種別が締結と緩衝のどちらかである、といった定義域の制約は、キーだけでは表せない。
この定義域とキー以外の制約は、ドメイン・キー正規形で扱う対象になる。第五正規形が整えるのは、射影と結合について、結合従属が候補キーから導けるところまでである。