Eclipseデータベースモデリングプラグイン「Jiemamy」ver0.0.2
最近ずっと色々作り込んでおりました。ということで、まだまだ実用化は無理な状況ですが、プレビュー2ということで、v0.0.2をリリースしてみました。
更新サイトからインストールしてください。更新サイトは、v0.0.1の時と違うURLです。また、v0.0.1から「プラグインID」が変更になっているので、v0.0.1は手動でアンインストールしてからインストールして下さい。
当然ですが、v0.0.1のデータファイルとの互換はありません。また、次期バージョンとの互換も無い予定です。(この辺、まだモデルが固まっていないので、互換性つけるのは結構難しいですね。)
色々機能追加してます。RDBMSからスキーマをインポートできます。ただ、基本的にテストしているのはPostgreSQL中心で、軽くMySQLにも使ってみています。対応しているように見えるDerby, HSQLDB, Oracleには全く手が回っていません。
- FOREIGN KEY の ON DELETE, ON UPDATE の情報がリバースエンジニアリングできない。
- PostgreSQL, MySQL以外では、View名しか取得できない。定義をどうやって取ってこようか…。
- DDL出力時に、View定義の依存順に定義を出力していない。
- エラーマーカーはまだぐちゃぐちゃ(だと思う)
とか、まぁその辺が目下の課題でしょうか。あとはバグ潰し。
Eclipseデータベースモデリングプラグイン「Jiemamy」ver0.0.1
先日、「公開ってできるのかなぁ」なんて事を書いたんですが、よーーく考えると、オープンソースの派生プログラムは公開できるとか出来ないとかじゃなくて「公開しなきゃいけない」んですかね(汗) よくわかりませんが。派生プログラムは原作と同様のライセンスで再配布可能というのは確かなハズです。というわけで、ソースも一緒にjarにして公開します。(はずかしーからソースは見て欲しくないけど(笑))
とりあえず、プレビュー版って言うんですか? 今出来上がってる所までで、公開しちゃいます。こんな感じのイメージになりましてよ、という位置づけで。というわけで(しないだろうけど)間違っても実戦投入とかしないでください(笑) 次のバージョンでは、保存したファイルも読み込めなくなりそうですし。
何かご意見がありましたら、是非。
ライセンス
AmaterasERDの派生プロダクトということで、Eclipse Public Licence 1.0 が適用されるかと思います。
ダウンロード&インストール方法
Eclipse更新サイトのURLに http://xet.jp/update/ を指定して、インストールしてみてください。
超適当な解説
- ファイル(F)>新規(N)>その他(O)>Jiemamyプラグイン>Jiemamy ERダイアグラム で新規ダイアグラムファイルを作る。
- SQL方言を選ぶ。何気に色んなDBに対応中。どれもこれも現在の所不完全ですが…。自分的にPostgreSQLメインなので、これが一番作り込んであるかな…。とりあえずお試しなのでPostgreSQL選んでみてください。継承モデリングとか出来ますので。
- エディタが開いたら、あとは直感でいけるはず。テーブルを適当に作ってFKとか継承とかしてみてください。
- エディタ背景を右クリックして、Generate>DDLで、DDL吐きます。
Eclipseデータベースモデリングプラグイン「Jiemamy」
早速、AmaterasERDを雛形に色々加工させて頂いて、色々やってます。目標としては、以下の通り。
- ClayとAmaterasERDのいいとこ取り(笑)
- PostgreSQL対応。
- PostgreSQLの「データベース継承」のモデリング対応。
- Viewのモデリング対応。
- テストデータの管理。
単にPostgres対応ならば、Dialect@AmaterasERDの拡張を提供すれば良いのですが、PostgreSQLの「データベース継承」*1のモデリングがしたいもんで、色々いじくってる次第です。あと、Viewのモデリングも、拡張ポイントでは対応できないので…。
基本機能はDBからのリバース機能以外、大体出来上がりました。この機能はAmaterasERDに搭載されているので、移植してくれば良いのですが…。Jarのクラスローダとか、まだイマイチ理解できていないので、とりあえず棚上げ。
テストデータの管理というのは、モデリングついでにテストデータも作成・管理ができて、DDL吐きついでに、INSERTも吐いちゃう、という機能を目論んでます。
ところで、これって公開するとしたら、どのような形で公開できるんだろう。明らかにAmaterasERDの派生プロダクトなので、Eclipse Public Licenceが絡んで来ると思いますが…。改変して使ったり、再配布しても良いってのがオープンソースだと思いますが、ライセンスの細かいことを知らないので、なんか「自由」ってのは無意味に恐いです(汗)
自由とは、自らが責任を持つこと、ですからねぇ…。
データベースモデリングツール
- Eclipseプラグイン
- Clay Database Modeling (Coreはフリー)
- AmaterasERD (オープンソース)
- スタンドアロン
- DBDesigner (GPL)
- DbModeller (フリー)
- SI Object Browser (商用)
- Enterprise Architect (商用)
上記色々あります。商用のもの以外、色々試してみたのですが、いまいちしっくり来ません…。
RDBMSはPostgreSQLを採用しているのですが、独自拡張機能を使ったりすると、もうお手上げですね。
最近はEclipseプラグイン開発に関して色々情報を仕入れているので、自作とかしてみようかなぁ…。
AmaterasERDがオープンソースなので、色々参考にさせて頂いて、挑戦してみようかな。(でも挫折しそー(笑))
「式」を格納するスキーマ
リレーショナルモデルで「式*1」を格納したい場合、というのは難しいですよね。
例えば以下の様に。こんなイメージのテーブルがあって、こんなSQLを飛ばすとこんな感じで返ってくるようなテーブル設計ですね。
TABLE t_value
value_id | value |
---|---|
a | 30 |
b | 2 |
c | false |
d | 16 |
e | true |
普通のテーブルです。いや、valueカラムに数値型とBOOL型が混在していますが、まぁイメージということで。
TABLE t_formula
formula_id | formula |
---|---|
1 | (a+b)/d |
2 | sqrt(d)*2 |
3 | !(c OR e) |
SQLっぽいもの
SELECT formula FROM t_formula WHERE formula_id = 1; --> 2 SELECT formula FROM t_formula WHERE formula_id = 2; --> 8 SELECT formula FROM t_formula WHERE formula_id = 3; --> false
こういうのって、可能なんでしょうか…。XMLDBであれば出来そうな雰囲気があるんですが。RDBでの方法をご存知の方、いらっしゃいませんか。
要件として、
- formulaは常に変化していく。従って、アプリケーションにハードコーディングする訳にはいかない。同様に、ストアドプロシージャも不適であると思われる。
- 例のテーブルでは、数値型とBOOL型が混在しているが、あくまでも例なので、混在する必要はない。
- 「式」は、例では、formulaカラム1つに格納しているが、必要ならば分解して格納しても構わない。
- ノリで sqrt とか使っちゃってますが、とりあえず四則演算と論理演算ができれば…。
*1:数式や論理式
PostgreSQLでテーブルの継承
PostgreSQLには、テーブルの継承なんていう、とんがった機能があります。前衛的〜。
スキーマを定義してみる
-- オブジェクトテーブル CREATE TABLE "object" ( "object_id" SERIAL PRIMARY KEY, "name" VARCHAR(32) NOT NULL ); --NOTICE: CREATE TABLE will create implicit sequence "object_object_id_seq" for serial column "object.object_id" --NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "object_pkey" for table "object" --CREATE TABLE -- ヒトテーブル CREATE TABLE "human" ( "height" INT, "weight" INT, PRIMARY KEY ("object_id") ) INHERITS ("object"); --NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "human_pkey" for table "human" --CREATE TABLE -- 製品テーブル CREATE TABLE "product" ( "price" INT, PRIMARY KEY ("object_id") ) INHERITS ("object"); --NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "product_pkey" for table "product" --CREATE TABLE
継承元のCHECK制約, NOT NULL制約, DEFAULT値は引き継がれますが、UNIQUE制約, FOREIGN KEY制約, PRIMARY KEY制約は継承されないので、継承先であらためて指定する必要があります。