2003年 3月16日 | 状態遷移と繰返項目 | >> 目次 (テーマ ごと) |
● QUESTION | (アトリビュート のない) 繰返項目の 「一意性」 を実現するためには、どうすればよいか。 | |
▼ ANSWER | 日付を定義すればよい。 | |
2008年 4月 1日 補遺 |
「繰返項目」 (T字形 ER手法では、「データ の多義」 と呼んでいるが) では、「並び」 を示すために 「種別 コード」 を用意しなければならない(89 ページを参照されたい)。 応用問題として、以下の例 (状態遷移と繰返項目) を考えてみる。
[ 前提 ] 引合 {引合番号、引合日、・・・、 競合他社名称 (1)、 競合他社名称 (2)、・・・} 標準形 (正規形) は以下になる。
引合 {引合番号、DATE、・・・} [ E ] 競合他社は、名称を五十音順に管理してもいいが、「並び」 を実現するために、「競合度合 (競合順序)」 を定義したとする。
引合 {引合番号、DATE、・・・} [ E ] さて、引合のなかに、「状態遷移」 (初回引合、入札中、稟議中、受注確定など) を管理する区分 コード が用意されていたとする。したがって、「引合」 の アトリビュート の 「DATE」 は、状態遷移のつど、「初回引合日」 とか 「入札日」 とか 「稟議日」 とかが記入されることになる。
引合 {引合番号、DATE、引合状態区分 コード、・・・} [ E ] そうすれば、「引合番号 (R)、引合状態区分 コード (D)、競合他社名称、競合順序} の 「INDEX-only」 を使うことができる。 競合他社情報を見直すのであれば、「競合見直し日」 を使うのが正論だと思う。 状態遷移のつど、競合他社情報を見直すのであれば、たまたま、状態遷移した 「DATE」 と 「競合見直し日」 が同じになるが、烈しい競争のなかで、競合他社情報を更新するのであれば、1つの状態遷移のなかでも、競合他社情報を、複数回、見直するようにしておいてもいいのではないでしょうか。
引合 {引合番号、DATE、引合状態区分 コード、・・・} [ E ] たとえば、初回引合日から次の状態遷移である稟議日までの間に、競合他社情報を、2回、見直したとすれば、 稟議のときの競合他社情報は、稟議日と同じか内輪で近い日の 「競合見直し日」 を記入された 「Entity. Role」 が状態遷移した 「引合」 に対応する競合情報になる。 |
[ 補遺 ] (2008年 4月 1日)
まず、「多義」 に関して、「T字形 ER手法」 と TM (T字形 ER手法の改良版) では、考えかたが変わった点を注意しておきます。旧 「T字形 ER手法」 では、「多義 (繰返項目)」 を 「entity. role」 の形で記述して、べつの テーブル にしていましたが、TM では、「多値 (many-value)」 の観点から見直して、「多値」 を以下の 2つの系統として示しています。
(1) 「多値の OR 関係」 (MO あるいは MOR と略記します) 旧 「T字形 ER手法」 が云っていた 「多義」 は、(1) の 「多値の OR 関係」 です。
さて、本 エッセー の例では、「競合他社名称」 が 「多値」 になっていて、かつ、「OR 関係」 ではなくて──それらの値のなかで、どれか一つが成立するのではなくて──、「AND 関係」 です──すべての値が共時的 (synchronique) に成立します。したがって、本 エッセー のなかで示した 「entity. role」 の記述は間違いです。
引合 {引合番号、DATE、引合状態区分 コード、・・・} [ E ] MAND は、TMD (TM Diagram) の正則では、「one-header-many-details」 なので、いわゆる 「HDR-DTL」 形式で記述するのが正しいのですが、いちいち、「HDR-DTL」 の構成で記述するのが面倒であれば、上記したように、MOR と同じ記述することも略記として認めています。ただし、テーブル の性質は、「MAND」 として記述して下さい。 なお、「MOR」 と 「MAND」 に関しては、拙著 「赤本」 を参照して下さい (102 ページ〜 105ページ)。 |
<< もどる | HOME | すすむ >> | |
データ解析に関するFAQ |