ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

オブジェクト指向のクラスとDBのエンティティが一致する理由を、正規化操作から考える。

2008-06-30 18:35:10 | Weblog

 DBの正規化によって出てきたエンティティは、テーブルに相当するが、
このエンティティをモデル上のクラスとしていい理由というのは、
どこにも書いてないような気がするので、ちょっと書いてみました。

 その理由は、正規化理論から来ると思います。以下、DBの正規化から、それを
オブジェクト指向の世界からみると、どーなるかという関係を交えつつ、書きたい
と思います。




■そもそも

 そもそも、正規化とは、データベースにおいて、1事実1箇所に纏め上げる作業です。
 1事実1箇所に書くために、IDを振って、一意になるように管理します。

 一方、オブジェクトというのは、1つの存在であり、IDを振って管理できる
(アイデンティファイできる)ようなものです。

 つまり、エンティティもオブジェクトも、IDを振って一意に管理できる存在なわけで、
そのエンティティを導き出す正規化は、同時にクラスを導き出す操作でもあるといえます。




■第一正規形をオブジェクト指向的に見ると・・

 第一正規形は、繰り返しを排除しています。
 繰り返している要素というのは、1個1個区別できるわけです
 (1個目、2個目と区別できるから、繰り返しとわかる)

 そーいうものは、繰り返し各要素が、それぞれのオブジェクトともいえます。

 そこで、1個1個の存在にとりあえず分けます(分けなくてもいいけど・・)




■第二正規形をオブジェクト指向的に見ると

 第二正規形は、主キーを決めています。
 主キーは、IDを振って一意にする行為ですが、これはまさに、オブジェクトに
IDを振って一意にして、オブジェクトを管理している行為です。

 ということで、これは、オブジェクト(クラス)を決定している行為ともいえます。

 その後、第二正規形においては、複合キーの場合、キーを構成する一部のキーが
他項目と従属関係にあるかどうかチェックして、そうなっている場合、分離します。

 この行為をオブジェクト指向的に考えると、キーの一部に共通性があり、それを別に
抜き出して定義できるということで、継承できる親を分離している行為になります。




■第三正規形をオブジェクト指向的に見ると

 第三正規形は、推移従属関係を抜き出します。
 これは、主キーがきまると、ある項目(主キー以外の項目)がきまりますが、
その項目がきまると、値がきまってしまうというものです。

 これをオブジェクト指向的に考えると、
 主キー項目によって、オブジェクトそのものが定義されるわけですが
 そのオブジェクトの構成要素がある場合、構成要素のIDがきまってしまえば、
構成要素の属性値はきまります。そこでこの場合、その構成要素を分離している
ことになります。

 つまり、オブジェクトが、他オブジェクトが集まって構成されている場合、
その構成要素ごとに分離している操作ということになります。

 ただ、わざわざ、構成要素を分離しなくてもいいこともあります。
 車はタイヤから出来ていますが、自動車税の計算をするときに、タイヤに分割する
必要性はありません。これが、第三正規形まで行わない、正規化崩しになってきます。




こんなかんじで、正規化の行為は、クラスを導き出す行為ともいえそうです。

なので、エンティティとモデルのクラスが一致して来るんだと思います。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする