相違のサブセット間にandが出たらどうするの

サブセット間には交わりがあってはならない。
「取引先」を

  • 「現役取引先」
  • 「過去の取引先」

にサブセット化するのはモレ・ダブリがないのでよいが、

  • 「出荷先」
  • 「支払先」
  • 「請求先」

にサブセット化するのは、「出荷先かつ請求先」などの取引先が発生する(かもしれない)ので法度である。
しかし、顧客のコード体系に乗っかって絵を描いていると、このような「交わりのある区分コード」が出てくることがある。
こんな時どうするか。

二通りの処置

仕事で実際にこういうコードに遭遇したことがある。
この時は、「T字形ERデータベース設計技法」P82に、

「交わりのある区分コード」をresource「取引先区分」として切り出し、「取引先」「取引先区分」の対照表を生成する

という意味のことが書いてあるのを発見し、何だ、楽勝...と思ったところで、ハタと困った。

「出荷先」「支払先」「請求先」のアトリビュートの構成が違う(仮にサブセットにするなら「相違のサブセット」になる)のだが、その差分を吸収する器がないのだ。
「取引先」や「取引先・取引先区分 対照表」で吸収すると、nullのカラムが発生してしまう。こりゃ同一のサブセット向けの処置だな...

さらに古い本である「RADによるデータベース設計技法」P127を見ると、同じ問題に対して異なる処置をしている。
ここでは「スーパーセットの導入」という技が出てくる。
上の例でいうと、

  • 「出荷先」「支払先」「請求先」をそれぞれresourceととらえ、それぞれ「取引先区分」との間に対照表を生成する。
  • 生成された3つの対照表で、アトリビュート構成の差異を吸収する。
  • これだけでは「取引先」概念が無くなってしまうので、スーパーセット「取引先」を導入し、「出荷先」「支払先」「請求先」に共通するアトリビュートを吸収する。

...なるほど。

消えたスーパーセット

「T字形ERデータベース設計技法」以降、正美氏の著作にはスーパーセットに関する記述があまりない。
研修でも教えてもらえなかった。使いこなすのがむずかしいから、らしい。
同書P140の「DAの段位表」でも、スーパーセットを使いこなせれば4段(=独立してコンサルタントができるレベル)とされている。
スーパーセットについては、説明を相当書き込まないと誤用されるので、伏せておくことにされたのではないか。
相違のサブセットにandが出た場合の措置については、正美氏ご本人に伺いたいと思っている。