2006年 2月 1日 「多値の OR」 と 「多値の AND」 (その 3) >> 目次 (テーマ ごと)
  ● QUESTION   多値のなかで、OR と AND が混成されているとき、どう対応すれば良いか。
  ▼ ANSWER   選言・連言を判断して、基本形のなかで対応すれば良い。
2011年 2月16日 補遺  



 「多値の AND」 に関して、2005年 6月16日および 2005年 7月 1日の記述は、「多値の AND」 が、なんらかの形で、アトリビュート を付随する形態として考えて、「HDR-DTL」 になる形態を検討しましたが、「多値の AND」 が認知番号に対して起こるのであれば、以下のように単純に記述すれば良いでしょう。

 ┌─────────────────┐     ┌─────────────────┐
 │       営業所      R│     │       契 約      E│
 ├────────┬────────┤     ├────────┬────────┤
 │営業所コード  │営業所名称   │     │契約書番号   │契約日     │
 │        │        │>───<│        │        │
 │        │        │     │        │        │
 │        │        │     │        │        │
 │        │        │     │         │        │
 └────────┴────────┘     └────────┼────────┘
                                  ┼
                                  │
                                  ∧
                         ┌─────────────────┐
                         │    契約. 営業所種別   MA│
                         ├────────┬────────┤
                         │契約書番号(R)  │        │
                         │営業所コード(R) │        │
                         │        │        │
                         │        │        │
                         │         │        │
                         └────────┴────────┘

 
 「多値の OR」と「多値の AND」は、instance のあいだの選言・連言です。 たとえば、3件の データ があって、その 3件の データ が排他的 OR であれば 「多値の OR」 であり──言い換えれば、一時点で、1つの データ しか成立しないということですが──、3件が並立するのであれば 「多値の AND」 です。
 TM では、OR あるいは AND は、「事態の成立・不成立」 を示しています。すなわち、或る一時点で、複数の データ のなかで、1つの事態が成立するのであれば、OR 関係として扱い、高々 1つ (つまり、複数) 成立するのであれば、AND 関係として扱います。

 このときに、やっかいな論点になるのは、instance のあいだに選言と連言が混成されている事態です。
 たとえば、以下を考えてみてください。(参考)

 (1)(a OR b) OR c

 (2)(a OR b) AND c

 
 会議室の予約を例にします。
 (1) は、第一候補として、a および b の 2つを予約して──ただし、最終的には、いずれか 1つが選ばれるという前提ですが──、第二候補として c を予約します。一見、a と b は、(構文論的には、) AND の関係に思えますが、意味論的には OR 関係です。そして、第一候補として 2つを予約した事実は、( ) を使って示されています。つまり、第一候補は、集合 オブジェクト になっています。

 (1)は、「多値の OR」 として扱うことができます。たとえば、

 {予約番号、予約日、・・・} [ E ]
 {予約番号(R)、会議室番号(R)、種別 コード} [ MO ]
 {001、a、1}
 {001、b、1}
 {001、c、2}

 
 (2)は、基本的には、「多値の AND」として扱うことになるでしょうが、(a OR b) を記述するのが、 少々、やっかいです。たぶん、「予約番号」 の 「行番号 (あるいは、枝番、追番)」 を使って、OR を 指示することになるでしょう。

 {予約番号、予約日、・・・} [ HDR ]
 {予約番号、行番号、会議室番号(R)} [ DTL ]
 {001、1、a}
 {001、1、b}
 {001、2、c}

 あるいは、こういう事態に対応するために、「候補順位種別 コード」 を用意しているかもしれない。そうであれば、以下のようになるでしょう。

 {予約番号、予約日、・・・} [ HDR ]
 {予約番号、行番号、会議室番号(R)、候補順位種別 コード} [ DTL ]
 {001、1、a、1}
 {001、2、b、1}
 {001、3、c、2}

 


(参考)

 ほかにも、(a AND b) OR c の現象も起こります。たとえば、第一候補は a と b の 2つの部屋を使用するが、第二候補は、c の 1つの部屋を使うことを考えることができるでしょう。このときに、(a AND b) を集合 オブジェクト として考えて、A とすれば、「A OR c」は MO ですが、A そのものは MA ですので、 HDR-DTL 構成となります。もし、この構成を正確に記述するならば、以下になります。

  [ HDR ]
  {予約番号、予約日、・・・}.

  [ DTL ]
  {予約番号、行番号、会議室番号(R)}-────────┐
  [ MO ]                                  ├×─ 予約会議室
  {予約番号(R)、会議室番号(R)、種別 コード} ─────┘

 そして、DTL の行番号が種別 コード として使われるでしょう。
 ただ、「意味論的に正確に記述した」 構成が 「構文論的にわかりやすい」 かといえば、そうでもないでしょうね。だとすれば、以下の MO を使って、種別 コード のなかに 「同じ値」 が記入されていたら、AND であるという 「便法」 のほうが 「見やすい」 でしょう (ただし、アトリビュート・リスト のなかには、その点を注記しなけらばならない)。

  {予約番号、予約日、・・・}.
  {予約番号(R)、会議室番号(R)、種別 コード}.

 ただし、この構成は、あくまで、「便法」 です。
 なぜなら、「データ 構造」 を観て、OR 関係あるいは AND 関係を判断できないから。

 ちなみに、以下の事態も考えてみて下さい。

  (1) (p AND q) OR (r AND s).
  (2) (p OR q) AND (r OR s).

 



[ 補遺 ] (2011年 2月16日)

 取り立てて、補足説明はいらないでしょう。





  << もどる HOME すすむ >>
  データ解析に関するFAQ