2004年 12月16日 「相違の サブセット」 の実装形 (その 2) >> 目次 (作成日順)
  ● QUESTION   共通 データ を上位 セット として、相違 データ を サブセット として実装して良いか。
  ▼ ANSWER   「技術的」 には、それでも良いが、「理論的」 には、整合的ではない。
2010年 1月 1日 補遺  



[ 前提 ]

  営業所 [ R ]
   |
   × (営業所区分 コード)
   │
   ├{国内営業所|営業所 コード, 営業所名称,・・・}
   │
   └{海外営業所|営業所 コード, 営業形態, 営業所名称,・・・}

  なお、営業形態は、以下の意味とする。
   - 現地経営
   - 国内からの派遣経営

 
[ 考えかた ]

 実装形として、以下の テーブル を考える。

 (1) {営業所 コード, 営業所区分 コード, 営業所名称,・・・}.
 (2) {営業所 コード, 営業形態}.

 以上の実装形にした理由は、おそらく、以下の点を配慮したのであろう。

 (1) 営業所を、つねに、一覧的に表示しなければならない。
 (2) 営業所の一覧表示では、国内と海外が、べつべつの集合として表示されていれば良い。
 (3) 営業形態を表示しなくても良い。

 
 構文論として、営業形態を営業所 コード から切り離すための整合性はない。言い換えれば、営業形態は、営業所 コード (営業所の集合) のなかに帰属していなければならない データ である。
 もし、営業形態を営業所 コード (営業所の集合) から切り離すとすれば、「営業形態を、(情報のなかで) 表示しなくても良い」 ということを理由にするなら──営業所のなかで、営業形態は、記録対象にはなっているが、管理対象となっていないなら──、意味論的に観て、営業形態は、「VE」 として扱われなければならない。そうだとすれば、そもそも、「論理設計」 が妥当でなかった、ということである。つまり、「論理設計」 は、以下の構造でなければならない。

  営業所 [ R ]
   |
   × (営業所区分 コード)
   │
   ├{国内営業所|営業所 コード, 営業所名称,・・・}
   │
   └{海外営業所|営業所 コード, 営業所名称,・・・}

 {営業所 コード(R)、営業形態}. [ VE ]

 
 「論理設計」 のなかで、整合的な意味単位として作られた 個体 (正規形) を変形して (正規形を崩して) 実装することは、使っている RDB が粗悪な プロダクト でないかぎり、まず、考えられない。「物理設計」 というのは、使っている ハードウェア や ソフトウェア (RDB、言語など) の特性に合うように、「論理設計」 を調整する作業であって、「論理設計」 で記述された 「意味」 を崩すことではない。「意味 (の単位)」 を崩せば、それ (意味) を復原するための負荷を、アルゴリズム が担うことになる。もし、「論理設計」 と 「物理設計」 が、大幅に乖離するのなら、「論理設計」 の妥当性──あるいは、使っている ソフトウェア (RDB など) の品質──を疑えば良い。

 



[ 補遺 ] (2010年 1月 1日)

 本 エッセー に関して、取り立てて補遺はいらないでしょう。

 私 (佐藤正美) は、「抽象 データ 型」 を モデル の構成として考えています。すなわち、現実的事態に対して { データ、演算、制約 } の組を構成することを モデル の要件として考えています。そして、「抽象 データ 型」 では、データ 構造は、現実的事態を 「形式的」 に構成していなければならない──言い換えれば、ユーザ 言語を変形しないで、ロジック を使って (できるかぎり) 機械的に構成しなければならない。したがって、その構成は、アルゴリズム の L-真 (導出的な無矛盾性) と、(形式的に構成された) 項の F-真 (現実的事態との一致) を実現していなければならない。そういう立場から謂えば、「相違の サブセット」 において、共通項を ひとつの テーブル として、相違する データ 項目を べつの テーブル として実装することを認めない。なぜなら、そういう実装形は、F-真を破っているから。

 「物理設計」 という過程を思い違いしている エンジニア が多いのではないかしら、、、。「物理設計」 というのは、使っている ハードウェア・ソフトウェア の性能を考慮して、「論理設計」 の アウトプット を調整することを謂うのであって、「物理設計」 として一般的な定則──いつでも、どこでも、かならず適用される法則──がある訳じゃない。
 設計の原則は──特に、「抽象 データ 型」 の原則は──、「論理設計」 の アウトプット を (できるかぎり) そのまま実装するということです。





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