「一般的には、第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:正しくは「自明でない」多値従属性が存在している。