「一般的には、第3正規形まででよい」の根拠は何か?(2)
だめだこりゃ!
調べてみたら、正規化を理解していなかったことが判明。
増永良文「リレーショナルデータベースの基礎」を参照しつつ、何を勘違いしていたかをメモする。
1:Nの関係なら多値従属、なわけではない
同書によれば、第4正規形に分解できる(=非第4正規形の)リレーションには、多値従属性が存在している*1。
ここでいう多値従属性とは要するに1:Nの関係のことだと思っていたが、これは不正確な理解。
XとYをリレーションスキーマRの属性集合とするとき、YがXに多値に従属するということは、
Xの値が共通のタプルt1,t2があったとしたら、t1,t2のXでもYでもない部分の値を入れ替えた2本のタプルも存在していなくてはならないということだった。
つまり、分解して自然結合したら元に戻せることが、多値従属性の条件だった。
同書P-73によれば、多値従属性 講習名→→指導員名|参加者名 がスキーマ上に定義されているとしたら、↓こんなインスタンスはアリで、
(1)あり得るインスタンス
講習名 指導員名 参加者名 パソコン 山田 小林 パソコン 山田 石川 ワープロ 青木 野村 ワープロ 青木 鈴木 ワープロ 加藤 野村 ワープロ 加藤 鈴木 データベース 山田 小泉
↓こんな風に第4正規形に分解できるが、
講習名 指導員名 パソコン 山田 ワープロ 青木 ワープロ 加藤 データベース 山田
講習名 参加者名 パソコン 小林 パソコン 石川 ワープロ 野村 ワープロ 鈴木 データベース 小泉
↓これはダメ---想定したスキーマに違反しているので、そもそもこんな状態にはなり得ない---とのこと。
(2)あり得ないインスタンス ...講座「ワープロ」のデータが、指導員と参加者の順列組み合わせになっていないから、ダメ
講習名 指導員名 参加者名 パソコン 山田 小林 パソコン 山田 石川 ワープロ 青木 野村 ワープロ 青木 鈴木 ワープロ 加藤 石川 データベース 山田 小泉
システム化の対象である業務に上記のような表が出てきたら、そこには(自明でない)多値従属性は存在しないから、これ以上分解しなくてよい(分解できない)。
(2)の表を作成するルールは、
- 講習名が決まれば(参加者には関係なく)複数の指導員が決まる
- 講習名が決まれば(指導員には関係なく)複数の参加者が決まる
ではなく、別の何かのはずだ。
例えば、
- 1講習を複数の指導員が担当し
- 講習+指導員で特定される講座に対して複数の参加者が決まる
のだとすれば、(2)の表はこれ以上分解できない(=すでに第4正規形になっている)。
で、第4正規形への分解はしなくてもいいのか
ここまで理解したところで「正規化は第3正規形までで十分」という意見を再考すると。
自明でない多値従属性を持った表が業務で必要になったとして、それをテーブルとして実装するのは、いい考えとは思えない。
どう考えても、これはjoinの結果だろう。
「正規化は第3正規形までで十分」説が、いっそう怪しくなってまいりました。
*1:正しくは「自明でない」多値従属性が存在している。