昨日、クラス図から、Javaのプログラム自動生成について書いた。
そして、今日、ER図について書いたので、
今回は、ER図からの自動生成、具体的には、テーブル生成SQL,データアクセスクラス自動生成の可能性について書いてみる。
■ER図→テーブル生成SQL
具体的には、ER図のエンティティから、SQLのCreate Table文を作成することになる。
この場合、エンティティの属性が、SQLのテーブルの各項目っていうことになる。
しかし、Create Table文を発行するためには、属性の
属性名はわかるのですが
属性のタイプ(型、intなど)
がわからないといけません。このうち、属性のタイプはわかりません。
また、NOT NULL属性はわかりません。
主キーについては、PKとかかれるのでわかります。
参照制約に関しては、FK(外部キー)はわかるのですが、これを全部制約にして、よいかどうか。。。
ただ、参照制約は書かなくても、テーブルは作れます。
ということで、テーブル生成をするためには、
・属性のタイプとNOT NULL制約
をER図のほかに情報として、属性に持たないといけません。
これをもてば、以下のような形で作成できます。
(ER図がRDBに、前に書いたように入っているとします)
1.エンティティテーブルのすべてのテーブルについて、以下の処理を行う
1-1.Create Table エンティティ名 ( 出力
1-2.属性テーブル中、対象のエンティティIDを持つものを抽出し、全レコードに以下の処理を行う
1-2-1.属性名 型 (NOTNULL制約あるとき NOT NULL),
→型とNOTNULL制約はER図拡張
1-3.1-2のレコード中、項目種別がPKのものを抽出し(複数ある場合もある)、
1-3-1.PRIMARY KEY (を出力
1-3-2.抽出した項目名を全部列挙
1-3-3.) USING BTREE,とかかく
(今回参照制約は省略)
1-4.)のあと、必要なことを書く(ENGINE=InnoDB DEFAULT CHARSET=utf8;とか)
■ER図→データアクセスクラス
2通りある。拡張する場合としない場合。
拡張しない場合も、する場合もどちらも、クラスはエンティティになる。
しかしこのとき、
拡張しないほうは、属性の型を持ってないので、
クラスのフィールドにsetter,getterを持たない。
拡張したほうは、属性をフィールドでかけて
private 型 属性名;
public get属性名1文字目大文字(型 属性名)
のようなかんじで、getter,setterがかける
→つまり、Beanになる。
どちらも、メソッドとしては、検索メソッド、編集メソッドを持つ。
もっと細かく、Create,Update,Select(Read),Deleteを作ってもいいけど、
(検索と編集は返り値が違うので分けないといけない)どちらにしても、
拡張しないほうは、引数にハッシュマップ等を使って、検索条件を設定するか
SQLをそのまま受け取り
結果を、検索の場合、ハッシュマップの配列にいれる。
拡張したほうは、引数にハッシュマップ等を使って、検索条件を設定するか
SQLをそのまま受け取り
検索結果を、Beanの配列などにセットできる(ハッシュマップでもOKだけど)
どちらにしても、エンティティテーブル、属性テーブルからある程度作成可能
てなことで、ER図は自動生成に使うには、型とNOTNULLとかを入力してもらったほうがいい。
そうすると、テーブルや入出力プログラムを自動生成できる。
なお、文中に、「クラスはエンティティになる」と簡単に言い切っちゃったけど、
このクラスとエンティティの話は、またこんど