2004年 7月 1日 バリデーション・ルール の対照表 >> 目次 (テーマ ごと)
  ● QUESTION   1つの対照表で、意味が違う 2つの関係が成立するが、どのように扱えばよいか。
  ▼ ANSWER   「原則的には、」 プログラム の アルゴリズム のなかで判断するしかない。
2009年 7月16日 補遺  



以下を例にする。

[ 前提 ]

 (1) 取引先として、出荷先と納入先を管理する。取引先 コード を認知番号とする。
    - 取引先には、出荷先と納入先が混ざっている。
    - 取引先には、出荷先と納入先を切り離すための指標 (区分 コード) はない。
    - 出荷先と納入先は、取引先 コード の値を観て、判断している。

 (2) 地域を管理する。地域 コード を認知番号とする。

 
[ 要件 ]

 (1) 出荷先が担当している地域を管理する。
 (2) 地域のなかの納入先を管理する。

 
[ データ 構造 ]

 (1) 取引先 {取引 先コード、名称、...}.
 (2) 地域 {地域 コード、名称、...}.
 (3) 取引先. 地域. 対照表 {取引先 コード (R)、地域 コード (R)}.

 
 さて、この対照表は、バリデーション・ルール を記述する対照表である。
 要件として、以下の 2つの バリデーション・ルール がある。

 (1) 出荷先が担当している地域。
 (2) 地域のなかの納入先。

 
 この対照表のなかに、バリデーション・ルール として、2つの 「意味」 が混ざっている。
 とすれば、2つの 「意味」 を、べつべつに記述したいが──べつべつの対照表にしたいが──、べつべつにするための形式的な指標がない。言い換えれば、出荷先および納入先は、取引先 コード の値を使って判断しているので、(取引先の) サブセット を作ることができない。1つの entity に対して、サブセット を作るためには、形式的要件 (null が生じること) か、実質的な要件 (区分 コード が宣言されていること) がなければならない [ 197ページ 参照 ]。

 したがって、この対照表は、2つの 「意味」 が混ざったまま、1つの対照表として定立するしかない。そして、1つの 「意味」 は、プログラム の アルゴリズム のなかで扱うしかない。
 あるいは、「INDEX-only」 を使って、2種類の CREATE INDEX を用意するしかない。

 
 ただ、データ 構造を 「実装する」 際 (あるいは、物理設計では)、たとえば、この対照表を、物理的に 2つに切り離して、それぞれ、「出荷先が担当している地域」 と 「地域のなかの納入先」 を、べつべつに ロード することはできる。そうすれば、プログラム の アルゴリズム は単純になる。

 



[ 補遺 ] (2009年 7月16日)

 「F-真」 の対照表は実装しなければならないが──なぜなら、それは、現実的事象 (事実) を記述する データ だから──、「L-真」 の対照表は実装しないのが原則です──なぜなら、それは、事実に対する 「制約・束縛」 であって、現実的事象を記述する データ ではないから。したがって、「L-真」 の対照表は、プログラム のなかで アルゴリズム として記述するか、あるいは、DD (Data Dictionary) のなかに定義すべき項です。本 エッセー では、「L-真」 の対照表は、「原則として」、実装しない、と記述しています。

 私は、データベース・パラダイム で仕事をしている システム・エンジニア なので、「L-真」 の対照表を DD のなかで扱いたいのですが、マーケット に実存する (C/S 形態の) データベース には、遺憾ながら、「制約・束縛」 を定義して データベース を一元管理できるほど充実した DD が搭載されていないのが実状です。そのために、私は、「L-真」 の対照表を 「F-真」 の対照表と同じように データベース のなかに実装するようにしています。そういう対応をしておけば、プログラム の 「生産性」 「保守性」 および 「拡張性」 を簡単に実現できるので。ただ、本 エッセー で示した例のように、ひとつの対照表が 2つの 「意味」 を表すこともあるので、そういうときには、それらの ふたつの 「意味」 は、アルゴリズム のなかでしか記述できないでしょう──あるいは、プログラム のなかに記述しないのであれば、「便法」 として、それぞれの 「意味」 を べつべつの データセット として実装できますが、「データ の冗長 (data redundancy)」 になるでしょうね。





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