このウインドウを閉じる

Things present are judged by things past.

 
 30年前 (1970年代) に提示されたデータ設計技法 (チェンER手法やコッド関係モデル) が、どうして、いまでも、論点になるのか、といえば、それらのモデルが、(データ設計のなかで、)「意味論と構文論」 の原典だからです。

 さて、ERモデルと関係モデルは、べつべつのモデルです。しかし、いずれも、同じ原点に立っています。その原点とは、数学の「関係の論理(aRb)」です。

 まず、1970年に、コッド氏が、「関係の論理 (aRb)」を使って、「関係」を「関数」として考えて--R(a, b)として考えて--、「直積集合」を前提にした関係モデルを提示しました。

 「関係の論理 (aRb)」では、a および b は、ふつうなら、「個体 (主体集合)」--たとえば、従業員とか部門とか--を考えるのですが、コッド氏は、「属性値 (個々のデータ項目) 集合」を使う、という「絶妙な」着想を提示しました。つまり、a および b を、従業員番号とか従業員名称として考えて、「関係R」を使って、主体集合 (従業員) を記述する、というやりかたです。

        R{従業員番号、従業員名称、...}.

 
 そして、「関係R (タプルともいいますが)」を正規形にするために、関数従属性を使いました。つまり、(1つのタプルのなかで、) 或るデータ項目 (primary-key) に対して、ほかのデータ項目が、「高々」一意になるようにしたのです。「高々」というのは、「at most」ということであって、null値があっても良い、ということです。

 コッド氏は、(クラス概念ではなくて、) セット概念を使いました。
 つまり、「個体と集合」の2つの階でしか考えないので--集合の集合 (関数の関数) を考えないので--、属性値集合を集めるために、すでに、関数 (関係R) を使ってしまったので、主体集合のあいだで、関係R を使うことができない。

 そのために、テーブル (タプル) のあいだでは、(ふたたび、関係R を使うことができないので、) 包摂従属性を導入しました。
 包摂従属性とは、A ⇒ B (あるいは、A ⊃ B) のことです。つまり、或るテーブルのキーは、ほかのテーブルのなかにもなければならない、ということです。

 以上のように、コッド関係モデルは、関数従属性と包摂従属性を前提にして、「構造」を記述するようにしました。ただ、コッド関係モデルでは、(属性値集合と同じ次数の) 「空集合」を認めています。つまり、属性値の null値 を認めています。

 コッド関係モデルは、従属性を使って、「構造」を作るルールを示したので、「構文論 (モデルを作る文法)」です。
 ただし、構文論上、null値は、「値が成立しない」という意味しかないのですが、実際のデータを対象にしたら、null値は、「多義」--unknown と undefine の2つの意味を示すこと--になってしまいました。

 
 いっぽう、チェン氏は、1976年に、やはり、「直積集合」を前提にして、ER手法を提示しました。ER手法では、「関係の論理(aRb)」の個体 (a および b) は、(属性値集合ではなくて、) 「主体集合」--たとえば、従業員とか部門とか受注とか--として扱われています。
 つまり、コッド関係モデルに比べて、階が1つ上になっています。

 「関係の論理(aRb)」を、R(a、b) として考えたら、当然、a とか b は、数学上、関数R の変項であって、「無定義語」なのですが、チェン氏は、a とか b を「entity」と言ったので、「entity」の定義が論点になります。ただ、チェン氏は、「entity」を例示しましたが、定義を下さなかった--なぜなら、モノは定義できないから。
 そして、「entity」として、人だとか場所だとか受注だとか、を例示しました。
 つまり、

        R{従業員、部門、受注、...}.

 そして、従業員や部門などの事物を、「主体型」entity といい、受注などの事象を「関連型」entity としました。「主体型」entity は、ER図では、□ (長方形) で記述され、「関連型」entity が ◇ (菱形) で記述されています。

 コッド関係モデルが、セット・アット・ア・タイム法を目的とした構造であるのに対して--つまり、構文論であるのに対して--、チェンER手法は、具体的なアクセス・メソッドを離れて、「現実の世界を、モノと関係を使って記述する」ことを目的としました--つまり、モデルのなかで使われている記号が、現実の世界のなかの事物を記述するようにしたので (指示関係を扱っているので)、「意味論」です。

 ただ、チェンER手法は、直積集合を使ったにもかかわらず、集合論の演算を示さなかった--和集合や共通集合を扱うことができない、ということです。したがって、直積集合を使った意味がない、ということです。
 そのために、コッド氏は、チェンER手法を烈しく非難しました。

 チェンER手法は、モデルとしては、いくつかの不備を出したのですが、現実の世界を記述して、一覧的に可視化できる、という点では貢献しました。

 そこで、チェンER手法の不備を補うために、以下の諸点を拡張した「意味論」のモデルが、いくつか提示されました(EER モデル、DAPLEX、SDM、など)。

  (1) 汎化 (generalization) と特化 (specialization)
  (2) 集約 (aggregation) と切断 (partitioning)
  (3) 抽象化 (abstraction) と具体化 (instantiation)

 それらの「意味論」モデルを総括して、「意味データモデル」と云います。

 
 以上に述べてきたように、チェンER手法とコッド関係モデルは、出所が同じですが--数学の「直積集合」を起点にしていますが--、チェンER手法は、「意味論」を扱い、コッド関係モデルは、「構文論」を、おもに、扱っています。
 したがって、チェンER手法は、概念設計のなかで使われ、コッド関係モデルは、論理設計・物理設計のなかで使われています。

 そうしたときに、論点になるのが、概念設計(意味論)と論理設計(構文論)の「兼ね合い」です。意味論も構文論も、モデルであるからには、当然ながら、対象としなければならないのですが、どちらを重視して、モデルを作るか、という点は、それぞれの手法の特徴になるでしょう。意味論と構文論のブレンドの割合が、それぞれの手法の特徴となるようです。

 
 (2004年12月16日)

 

  このウインドウを閉じる