goo blog サービス終了のお知らせ 

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

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

ER図とクラス図、テーブルの関係

2009-12-09 12:47:38 | そのほか

 RFPからプログラミングまで、シームレスに開発する方法というのを、書いていて、現在以下の図

の①、②、④、⑤は書いたので、今日は、③のER図とクラス(クラス図)と、テーブルの関係。




■ER図で描かれていること

 ER図で書かれているのは
  ・エンティティ
  ・アトリビュート
  ・リレーション
 なんだけど、この作り方を復習しておく

ドメインをきめて、データ構造と機能概要を割り出す方法を考えるで書いたとおり、成果物から、それを作成するのに必要な入力というのを考える。
 そうすると、成果物(画面とか帳票とか)と入力(画面が多いのかしら)する「モノ」っていうのが考えられる

 受注画面とか、売上トップ10帳票とか・・・

 これらは、モノなんだから、オブジェクトと考えられる。記載されている(可変)項目がプロパティとなる。

 さてさて、これらの項目のうち、コンピューターに保存しておかないといけないものがある。
 受注した商品とか、受注先とか・・・
 電気が切れたらさようなら・・・では困る。
 そこで、ファイルかDBに入れるんだけど、共通で利用するものは、DBに入れる。

 現在、データベースの主流は、RDBで、これは、単純なテーブル構造(項目の並びをテーブルとする構造)であって、階層構造にはなっていない。ところが、上記オブジェクト(受注画面)とかは、受注1つに対して受注品目が2個も3個も・・・という階層構造になっている。

 こまった・・・

 ということで、この階層構造を単純なRDBのテーブル構造に直す手順が正規化である。

 この複雑(階層構造を含む)なオブジェクトってか、データ(=受注画面とか、売上トップ10とか)を、

1.繰り返し部分っていうのは、その繰り返し部分だけで1つのデータ構造を持っているわけだから、
  繰り返し部分をなくしましょう=第一正規形

2.で1つのレコードになったら、保存するためには管理する必要があるので、ID(=主キー)をふります。
  主キーは、複数項目の組み合わせでもOKなんだけど、
  複数項目の場合、一部の項目が決まると、他の項目の値が決まってしまう
  =他のデータ構造を含んでしまってる
    →場合は分離しましょう=第二正規形

3.主キー以外でも、一部の項目が決まると、他の項目の値が決まってしまう
   =他のデータ構造を含んでしまってる
     →場合は分離しましょう=第三正規形

 という行為を行って、単純なデータ構造にする。

 そして、このとき、分離していった一つ一つのデータのまとまりがエンティティであり、
 そこの項目がエンティティのアトリビュートとなる。
 この場合、エンティティをテーブルとして、差し支えない。

 ER図のエンティティとアトリビュートは、このようにできる。

 一方のリレーションは、データを分離していくときに、分離先に分離もとのID(主キー)を入れて渡す。

 このデータ分離元-分離先の線がリレーションで、
 ・分離元(主キー)側が1
   (主キーが同じなのは、1レコードしかないでしょ、
    もし2レコード以上、同じ値の主キーがあったら、
    それはおかしい・・ってか、主キーじゃない)
 ・分離先がNで、外部キーとなる

 リレーションには、どんなリレーションかって言うのを書くことになってるんだけど、それはいいかな・・・と(^^;)なくても開発上、こまらない。




■エンティティとクラス、ER図とクラス図

 エンティティは、上記操作によって作ると、ID(主キー)が振られることになる。
 つまり、このエンティティのインスタンスであるレコードは、一意に識別できて、管理できることになる
 これって、オブジェクトってことになる。オブジェクトは、何によってインスタンス化されたかというと、
 クラス。

 なので、こんな関係になる


 エンティティ⇒テーブル      クラス
       ↓          ↓
      レコード    =  オブジェクト




ってことで、エンティティは、クラスとなりえる
(もちろん他にも、クラスになるものもある)

具体的には、ER図からクラスを以下のように作成する

・ER図のエンティティ名=クラス名
・ER図のプロパティ  =クラスのプロパティ
           =プロパティを元にSetter,Getter

こうすると、値のBeanクラスができる。
(Hibernateのマッピングクラス。プロジェクトによっては、これをバリューオブジェクトと呼ぶ)

ということで、ER図から、クラスができるのだから、
ここからクラス図が、かけないこともない。

ただ、クラスに書く場合、プロパティの型を決めないといけない。
DB定義書なら、型が書いてあるけど、ER図の場合は、プロパティ名から判断
(なんとか数=intみたいな)するしかない。




■ER図/クラス(図)からテーブル

 クラスで型を決めたら、テーブル作成のSQL(CREATE TABLE)も作成できる。

 ER図に主キーはあり、型もクラスのとき決めた。
 ただ、何桁分取るかということは、DB定義書からでないと、本来わからない。

 ここを、テキトーに取るんなら、作成できる。

 逆に言うと、実はDB定義書最強で、DB定義書からER図、マッピングクラス、CREATE文すべて作れる。




■・・・しかし、本当にクラス図?

 ここで、 
「これらは、モノなんだから、オブジェクトと考えられる。記載されている(可変)項目がプロパティとなる。」
と書いた。オブジェクトはインスタンスなので、これを生成したクラスというのも、考えられるってことだ。

つまり、

・受注画面なら、
   受注画面入出力項目を集め、それのセッターゲッターを書いたクラス

 =StrutsにおけるActionFormだ。まさに、クラス。

・売上トップ10帳票なら
   出力内容項目

 =これは、Cocoonなど帳票出力のソフトを使う場合、XMLで表現される。
  XMLで表現できる場合、マーシャリング、アンマーシャリング(って今、言わないの?O/Xマッピング?)
  を使えば、オブジェクトになることからわかるように、

  この項目もクラス化できる(出力項目をアトリビュートにし、セッター、ゲッターをつける)

ってことは、入出力メディアは、データのクラス化ができる。
これを、クラス図に描くことは可能だが・・・

帳票1つをクラス図にすると、ものすごく大きなクラス図になり、
それらを、帳票分、さらに、画面分、データベース分・・・

などと作っていくと、それだけで、莫大なクラス図になる。。。。

・・・意味あんのか?これらは、自動生成できるわけよ、上記のように・・・

なので、ここの部分のクラス図は描かないことが多いと思うけど、書こうと思えばかける。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Google ChromeのMac、Linux向... | トップ | UIの検証データを公開してい... »
最新の画像もっと見る

そのほか」カテゴリの最新記事