内包・外延・周延

周延とは何か。
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は順に、

  • だぶりのチェック
  • 漏れのチェック
  • 階の交叉のチェック

になっている。

階の交叉がダメな理由は、今ひとつ納得できないのだが...