2003年 9月 1日 | 非正規形と事業解析 [(D) の扱い ] | >> 目次 (作成日順) |
● QUESTION | データ 構造では、データ 重複は、絶対に許されないのか。 | |
▼ ANSWER | そんなことはない。 導出項目 (たとえば、「在庫」) を実装することがある。 | |
2008年 9月16日 補遺 |
● 非正規形には、「複写 (replication)」 と 「導出 (derivation)」 がある。
データ 設計では、「論理設計」 と 「物理設計」 という 2つの段階を考慮することが多い。
システム・エンジニア が目的としなければならない点は、「論理=物理」 を実現することにある。そのために、エンジニア として、技術を駆使するのである。ただ、データベース は、技術的な ツール であると同時に セールス の プロダクト でもある。最高級の機能を搭載している ツール が、かならずしも、プロダクト として普及する訳ではない。言いかたを換えれば、データベース を導入する ユーザ 企業でも、「費用対効果」 を加味して、プロダクト を選ぶ。つまり、限られた投資のなかで、プロダクト を選ぶ。 逆に言えば、データ の正規形が崩されれば崩されるほど、データベース の性能が悪い (あるいは、システム・エンジニア の技術力が悪い)、と判断してよい。 ただ、「完全な」 正規形を実装することは (現時点では) あり得ない、と思ってよい。非正規形には、以下の 2つがある。
(1) 導出項目 (derivation)
たとえば、「在庫残高 (誘導法を使った帳簿記録)」 は導出項目である。したがって、「完全な」 正規形のなかでは、定義してはいけない。しかし、企業の設立時点から現時点に至るまで、入庫 トランザクション のすべてと出庫 トランザクション をすべてを対象にして在庫残高を計算することは 「現実的」 ではない。いっぽうで、(制度会計上、公認会計士の) 実査立会があるので、期末の在庫残高を 「事実 (データ)」 として認知するのが普通である。 したがって、在庫残高という導出項目を データ 項目として定義するのが (事業のなかでは) 「健全な」 措置である。ただし、「在庫」 ファイル が、データ 構造のなかで、いきなり、記述されているのは適切ではない。「在庫」 は、データ 構造のなかでは、倉庫と棚と製品から導出される テーブル であり、在庫残高 (数量) は、入庫 (入荷) と出庫 (出荷) と倉庫間移動と (減耗などの) 調整から導出される項目である。それらの導出関係が、データ 構造のなかで、記述されていなければならない。
「在庫 (倉庫. 棚. 製品. 対照表)」 (D) は、derivation の略である。ちなみに、「倉庫. 棚. 製品. 対照表」 が、データ 構造上の導出を記述しており、数量 (D) が、計算上の導出を記述している。 データ 重複に関しては、たとえば、以下の データ 構造を例にする。 [ 例-1 ]
品目 {品目番号、品目名称、単価} [ R ]
品目 {品目番号、品目名称} [ R ]
品目 {品目番号、品目名称、単価} [ R ] T字形 ER手法が 「正規形 (T字形ER手法がいう正規形)」 を大切にする理由は、「正規形=事業解析」 を実現する点にある。つまり、「正規形を読めば、事業を判断できる」 という点をT字形 ER手法は目的としている。 たとえば、或る企業では、「例-1」 が 「事実 (事業の実態)」 であった、とする。しかし受注の データ 件数が膨大なので、いちいち、品目に アクセス して単価を入手すれば、データベース の高 パフォーマンス を実現できない、というふうに システム・エンジニア が勝手に判断して、品目の単価を受注のなかに複写して、以下の データ 構造を生成したとする。
品目 {品目番号、品目名称、単価} [ R ]
品目 {品目番号、品目名称、単価} [ R ] |
[ 補遺 ] (2008年 9月16日)
本 エッセー のなかで、「事実」 という語が使われていますが、「『事実』 とは いかなることを云うのか」 は、争点になります。ここでは、常識的な解釈として、「事実」 を 「時間・空間のなかでみいだされる実在的な出来事あるいは存在」 としておきましょう。具体的には、以下の 3つの個体を云います。
(1) 持続する現実的な事物 「反復する抽象的な事物」 は、「実在」 ではないのではないかと思われますが、たとえば、われわれは、事業過程・管理過程のなかで、「カラー・コード」 を個体指定子にして 「カラー (色)」 を認知していますし、「サイズ・コード」 で 「サイズ (寸法)」 を認知していますし、「分類 コード」 で 「分類」 を認知しています。ただ、「色」 「寸法」 「分類」 などは単独で存在しないで、ほかの個体に付属する性質を言及する語か、あるいは、個体に対する行為を言及する語ですが、そういう概念あるいは行為 (物理的対象の性質あるいは関係) が、適当な条件の下で、与えられた事態のなかに現れるか現れないかという点を直接の観察によって確かめられます。そういう 「(物理的対象の性質 [ あるいは関係 ] の) 観察可能な特徴」 を ひとつの対象として認知したにすぎないので、「事実」 とみなして良いでしょう。 さて、そういうふうに 「事実」 を解釈すれば、「導出項目」 および 「複写項目」 は、いずれも、「『事実』 からの」導出・複写であって、「事実」 ではないでしょうね。導出も複写も、存在ではなくて、演算です。演算は、「事実」 に対する オペレーション (関数) であって、「構成する」 行為です。「事実」 を 「項」 として扱います──たとえば、p とか q とか。そして、オペレーション は、「事実」 に対して 「形式的構造」 を作る 「推論 (あるいは、式)」 であって、式で構成された構成物も項です──たとえば、p ∧ q とか、p ∨ q とか、p → q とか、p に対する ¬p とか。言い換えれば、式で構成された項は、事実の項に至るまで 「解析」 できるということです。しかも、項を作る式──無矛盾な式──は、同値になるように、いくつも作ることができます──たとえば、p → q に対して、¬(p ∧ ¬q) と ¬p ∨ q は同値であって、いずれを使ってもいいでしょう。したがって、「演算 (および、演算で構成された項)」 を 「事実」 と混同しないようにします。 演算で構成された項の典型的な例が 「在庫」 でしょうね。「在庫」 は、「倉庫」 「棚」 および 「商品」 とのあいだで構成される概念です。では、「在庫」 は、導出項目なので、構成のなかに記述しないのか といえば、記述するのが ふつうでしょうね──その理由は、本 エッセー のなかで述べました。私は、「在庫」 が導出項目であると記述しましたが──たしかに、「在庫」 は導出項目ですが──、いっぽうで、「棚卸し」 という事態に対応する 「事実」 であるというふうに 「解釈」 することもできます。たとえば、以下の構成を考えてみましょう。 { 倉庫 コード (R)、棚番号 (R)、商品番号 (R)、棚卸日、数量 }. すなわち、この 「対照表」 のなかに、「日付」 を定義すれば、この 「対照表」 は、「棚卸し」 という現実的事態に対応する 「F-真」 を満たしている、ということです。すなわち、以下の 「T-文」 を満たす、ということです。 言明 p が真であるのは、時刻 t において、事態 q と対応するとき、そして、そのときに限る。 「在庫」 の記録として、帳簿記録法 (継続記録法) と棚卸法 (実査) がありますが、帳簿記録法では 「L-真」 が問われ、棚卸法では 「F-真」 を問われるでしょうね。 TM は、「真」 概念を重視した体系になっているので、基本的に、「F-真」 を満たす個体のみを実装するのが正しいのですが、「L-真」 の対照表も ほとんど実装しています。ただし、「L-真」 の対照表を実装する理由は、プログラム のなかで 巾集合に対応する (あるいは、集合族に対する) アルゴリズム を構成するのが面倒なので──プログラム の生産性・保守性が悪くなるので──、データ に対する単純な関数引きで対応するという便法であって、ロジック では 「L-真」 は アルゴリズム で構成するか あるいは、Data Dictionary で定義するのが正しいことを注意しておきます。 導出項目と複写項目は、「(正当な) 演算」 と 「(重複を起こす) 複写」 という違いがあるのだから、それらを一律に (D) として扱わないで、複写項目には (C) という べつの標識を付与して注意を促すべきではないか という意見をいただくことが多いのですが、TM にとって、「事実」 以外は すべて、「事実」 に対する補集合であって──そして、その補集合を TM は個体として認めないので──、補集合の元を さらに分割・細分することは無意味でしょうね。 |
<< もどる | HOME | すすむ >> | |
データ解析に関するFAQ |