関係データベースの本質タプル正規形を扱う
本質タプル正規形は結合で生じる余分な行を除く
関係データベースの正規化で、第四正規形の次に置く段階が本質タプル正規形 (Essential Tuple Normal Form, ETNF) である。
4NF では、多値従属について、決める側が候補キーである。それでも、結合従属により、他の行と制約だけで同じ行が言えてしまうことがある。ETNF は、どの行も、一部分だけでも全体でも余分にならない状態である。
構文的には、ボイス・コッド正規形であり、かつ明示したどの結合従属でも、射影先のどれか1つが候補キーを含む状態である。
取次表の対応を3つの表へ移す
第四正規形の取次表では、担当とメーカー、メーカーと部品、担当と部品のどの2列の組も事実なら、3列の組も必ず成り立つ。行を区別する候補キーは (担当, メーカー, 部品) だけである。
| 担当 | メーカー | 部品 |
|---|---|---|
| 山田 | 東工 | ねじ |
| 山田 | 西工 | 座金 |
| 鈴木 | 東工 | 座金 |
| 山田 | 東工 | 座金 |
山田と東工、東工と座金、山田と座金の組は、いずれも上の3行に現れる。結合従属により、山田・東工・座金の行は、その3行と制約だけで言える。候補キーは3列すべてなので、結合従属のどの射影先も候補キーを含まない。この表は 4NF だが ETNF ではない。
担当とメーカー、メーカーと部品、担当と部品の対応を、それぞれ別の表へ移す。
担当メーカーの表では、担当 と メーカー の組で行が1つに決まる。
| 担当 | メーカー |
|---|---|
| 山田 | 東工 |
| 山田 | 西工 |
| 鈴木 | 東工 |
メーカー部品の表では、メーカー と 部品 の組で行が1つに決まる。
| メーカー | 部品 |
|---|---|
| 東工 | ねじ |
| 西工 | 座金 |
| 東工 | 座金 |
担当部品の表では、担当 と 部品 の組で行が1つに決まる。
| 担当 | 部品 |
|---|---|
| 山田 | ねじ |
| 山田 | 座金 |
| 鈴木 | 座金 |
3つの表をつなぐと、分ける前の行に戻る。山田・東工・座金は、3つの2列表の組から復元できる。
本質タプル正規形でも結合従属は残る
表を分けると、値の直し方と追加の仕方が単純になる。
- 山田と東工の取次を消すときは、担当メーカーの表の1行を消せばよい。部品の数だけ行を消す必要はない。
- まだ部品と結びついていない担当とメーカーの組も、担当メーカーの表へ追加できる。
- ある部品の行をすべて消しても、担当とメーカーの対応は担当メーカーの表に残る。
ここまでの表では、結合従属の射影先に候補キーを含むものはない。それでも、射影先の1つが候補キーを含めば、行全体が余分になることはない。次の納品表は ETNF である。
| 仕入先 | 部品 | 案件 |
|---|---|---|
| 北商 | ねじ | A工事 |
| 南商 | ねじ | B工事 |
| 北商 | 座金 | B工事 |
仕入先と部品が揃えば案件は1つに決まる。行を区別する候補キーは (仕入先, 部品) だけである。仕入先と部品、部品と案件、案件と仕入先のどの2列の組も事実なら、3列の組もこの表になければならない。結合従属の射影先のうち (仕入先, 部品) は候補キーなので、この表は ETNF である。一方、この結合従属は候補キーだけでは導けないので、第五正規形ではない。
北商のねじは A工事だけである。仕入先と部品が同じ行が2つあると、関数従属に反する。結合従属があっても、候補キーを含む射影先があるので、他の行だけで同じ行全体が言えてしまうことはない。
この結合従属を候補キーだけから導けるようにするのは、第五正規形で分ける対象になる。本質タプル正規形が整えるのは、行が一部分でも全体でも余分にならないところまでである。