2003年 3月16日 状態遷移と繰返項目 >> 目次 (テーマ ごと)
  ● QUESTION   (アトリビュート のない) 繰返項目の 「一意性」 を実現するためには、どうすればよいか。
  ▼ ANSWER   日付を定義すればよい。
2008年 4月 1日 補遺  



 「繰返項目」 (T字形 ER手法では、「データ の多義」 と呼んでいるが) では、「並び」 を示すために 「種別 コード」 を用意しなければならない(89 ページを参照されたい)。

 応用問題として、以下の例 (状態遷移と繰返項目) を考えてみる。

[ 前提 ]
 (1) 受注の 「引合」 を管理している (認知番号は 「引合番号」 である)。
 (2) 受注引合の際に、競合した企業の名称を管理している。競合他社は複数を入力できる。

 引合 {引合番号、引合日、・・・、 競合他社名称 (1)、 競合他社名称 (2)、・・・}

 標準形 (正規形) は以下になる。

 引合 {引合番号、DATE、・・・} [ E ]
 引合. 競合他社 {引合番号(R)、競合他社名称} [ Entity.Role ]

 競合他社は、名称を五十音順に管理してもいいが、「並び」 を実現するために、「競合度合 (競合順序)」 を定義したとする。

 引合 {引合番号、DATE、・・・} [ E ]
 引合. 競合他社 {引合番号(R)、競合他社名称、競合順序} [ Entity.Role ]

 さて、引合のなかに、「状態遷移」 (初回引合、入札中、稟議中、受注確定など) を管理する区分 コード が用意されていたとする。したがって、「引合」 の アトリビュート の 「DATE」 は、状態遷移のつど、「初回引合日」 とか 「入札日」 とか 「稟議日」 とかが記入されることになる。

 
 競合他社情報を、状態遷移のつど、見直して、競合履歴も記録するとすれば、「Entity.Role」 は、それぞれの サブセット に対して生成されるが、実際の データ として使うときには、「引合番号(R)、競合他社名称、競合順序」 という形では、どの状態遷移のときの競合状態なのかという点がわからない。
 とすれば、状態遷移の区分 コード を 「(D)」 として使うか、、、エレガント ではないわなあ(笑)。

 引合 {引合番号、DATE、引合状態区分 コード、・・・} [ E ]
 引合. 競合他社 {引合番号(R)、競合他社名称、競合順序、引合状態区分 コード (D) } [ Entity.Role ]

 そうすれば、「引合番号 (R)、引合状態区分 コード (D)、競合他社名称、競合順序} の 「INDEX-only」 を使うことができる。

 競合他社情報を見直すのであれば、「競合見直し日」 を使うのが正論だと思う。

 状態遷移のつど、競合他社情報を見直すのであれば、たまたま、状態遷移した 「DATE」 と 「競合見直し日」 が同じになるが、烈しい競争のなかで、競合他社情報を更新するのであれば、1つの状態遷移のなかでも、競合他社情報を、複数回、見直するようにしておいてもいいのではないでしょうか。

 引合 {引合番号、DATE、引合状態区分 コード、・・・} [ E ]
 引合. 競合他社 {引合番号(R)、競合他社名称、競合順序、競合見直し日[ Entity.Role ]

 たとえば、初回引合日から次の状態遷移である稟議日までの間に、競合他社情報を、2回、見直したとすれば、 稟議のときの競合他社情報は、稟議日と同じか内輪で近い日の 「競合見直し日」 を記入された 「Entity. Role」 が状態遷移した 「引合」 に対応する競合情報になる。

 



[ 補遺 ] (2008年 4月 1日)

 まず、「多義」 に関して、「T字形 ER手法」 と TM (T字形 ER手法の改良版) では、考えかたが変わった点を注意しておきます。旧 「T字形 ER手法」 では、「多義 (繰返項目)」 を 「entity. role」 の形で記述して、べつの テーブル にしていましたが、TM では、「多値 (many-value)」 の観点から見直して、「多値」 を以下の 2つの系統として示しています。

 (1) 「多値の OR 関係」 (MO あるいは MOR と略記します)
 (2) 「多値の AND 関係」 (MA あるいは MAND と略記します)

 旧 「T字形 ER手法」 が云っていた 「多義」 は、(1) の 「多値の OR 関係」 です。

 さて、本 エッセー の例では、「競合他社名称」 が 「多値」 になっていて、かつ、「OR 関係」 ではなくて──それらの値のなかで、どれか一つが成立するのではなくて──、「AND 関係」 です──すべての値が共時的 (synchronique) に成立します。したがって、本 エッセー のなかで示した 「entity. role」 の記述は間違いです。
 以下に訂正した 「構成」 を示します。

 引合 {引合番号、DATE、引合状態区分 コード、・・・} [ E ]
 引合. 競合他社 {引合番号(R)、競合他社名称、競合順序、競合見直し日} [ MAND ]

 MAND は、TMD (TM Diagram) の正則では、「one-header-many-details」 なので、いわゆる 「HDR-DTL」 形式で記述するのが正しいのですが、いちいち、「HDR-DTL」 の構成で記述するのが面倒であれば、上記したように、MOR と同じ記述することも略記として認めています。ただし、テーブル の性質は、「MAND」 として記述して下さい。

 なお、「MOR」 と 「MAND」 に関しては、拙著 「赤本」 を参照して下さい (102 ページ〜 105ページ)。




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