相違のサブセット間にandが出たらどうするの
サブセット間には交わりがあってはならない。
「取引先」を
- 「現役取引先」
- 「過去の取引先」
にサブセット化するのはモレ・ダブリがないのでよいが、
- 「出荷先」
- 「支払先」
- 「請求先」
にサブセット化するのは、「出荷先かつ請求先」などの取引先が発生する(かもしれない)ので法度である。
しかし、顧客のコード体系に乗っかって絵を描いていると、このような「交わりのある区分コード」が出てくることがある。
こんな時どうするか。
二通りの処置
仕事で実際にこういうコードに遭遇したことがある。
この時は、「T字形ERデータベース設計技法」P82に、
「交わりのある区分コード」をresource「取引先区分」として切り出し、「取引先」「取引先区分」の対照表を生成する
という意味のことが書いてあるのを発見し、何だ、楽勝...と思ったところで、ハタと困った。
「出荷先」「支払先」「請求先」のアトリビュートの構成が違う(仮にサブセットにするなら「相違のサブセット」になる)のだが、その差分を吸収する器がないのだ。
「取引先」や「取引先・取引先区分 対照表」で吸収すると、nullのカラムが発生してしまう。こりゃ同一のサブセット向けの処置だな...
さらに古い本である「RADによるデータベース設計技法」P127を見ると、同じ問題に対して異なる処置をしている。
ここでは「スーパーセットの導入」という技が出てくる。
上の例でいうと、
- 「出荷先」「支払先」「請求先」をそれぞれresourceととらえ、それぞれ「取引先区分」との間に対照表を生成する。
- 生成された3つの対照表で、アトリビュート構成の差異を吸収する。
- これだけでは「取引先」概念が無くなってしまうので、スーパーセット「取引先」を導入し、「出荷先」「支払先」「請求先」に共通するアトリビュートを吸収する。
...なるほど。
消えたスーパーセット
「T字形ERデータベース設計技法」以降、正美氏の著作にはスーパーセットに関する記述があまりない。
研修でも教えてもらえなかった。使いこなすのがむずかしいから、らしい。
同書P140の「DAの段位表」でも、スーパーセットを使いこなせれば4段(=独立してコンサルタントができるレベル)とされている。
スーパーセットについては、説明を相当書き込まないと誤用されるので、伏せておくことにされたのではないか。
相違のサブセットにandが出た場合の措置については、正美氏ご本人に伺いたいと思っている。