内包・外延・周延
周延とは何か。
SDIのサイトによれば、
http://www.sdi-net.co.jp/logico-07.htm
内包を使って正しい外延が形成されることを 「周延」 という。
とのこと。
では、内包・外延とはなにか。
論理学の用語らしいが、RDBに引き寄せて言えば、あるリレーションのスキーマが表現していることが内包。
社員マスタを「社員番号はnullではないユニークな数値。社員名はnullではない文字列。...」のように表現するのが内包。
内包は、リレーションが表す不変の意味。
これに対して、外延は時変のデータ。
今、社員マスタに社員番号1〜100までのデータが収容されているなら、この100件のデータが外延。
内包がスキーマで外延がデータなら、内包に反する要素が外延に含まれるはずがないから、「周延していないデータ構造」なんて作れないような気がする。
が、サブセットが絡むと、周延していないデータ構造ができる可能性が生じる。
周延しないパターンには、漏れ・だぶり・階の交叉の3種類がある。
データベース設計論P-134にサブセットのチェックすべき点がある。
ここを見ると、周延していないサブセットとはどういうものかが分かる。
●サブセットが周延しているかどうか、という点を調べる。
(1) サブセット間の関係が、「排他的OR」関係かどうか、という点を調べる。
(2) サブセットを総計したら、セットになるかどうか、という点を調べる。
(3) サブセットの階を入れ替えて、階構成が成立するかどうか、という点を調べる。
1,2,3は順に、
- だぶりのチェック
- 漏れのチェック
- 階の交叉のチェック
になっている。
階の交叉がダメな理由は、今ひとつ納得できないのだが...