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/ を指定して、インストールしてみてください。

超適当な解説

  1. ファイル(F)>新規(N)>その他(O)>JiemamyプラグインJiemamy ERダイアグラム で新規ダイアグラムファイルを作る。
  2. SQL方言を選ぶ。何気に色んなDBに対応中。どれもこれも現在の所不完全ですが…。自分的にPostgreSQLメインなので、これが一番作り込んであるかな…。とりあえずお試しなのでPostgreSQL選んでみてください。継承モデリングとか出来ますので。
  3. エディタが開いたら、あとは直感でいけるはず。テーブルを適当に作ってFKとか継承とかしてみてください。
  4. エディタ背景を右クリックして、Generate>DDLで、DDL吐きます。

Eclipseデータベースモデリングプラグイン「Jiemamy」

早速、AmaterasERDを雛形に色々加工させて頂いて、色々やってます。目標としては、以下の通り。

単にPostgres対応ならば、Dialect@AmaterasERDの拡張を提供すれば良いのですが、PostgreSQLの「データベース継承」*1モデリングがしたいもんで、色々いじくってる次第です。あと、Viewのモデリングも、拡張ポイントでは対応できないので…。

基本機能はDBからのリバース機能以外、大体出来上がりました。この機能はAmaterasERDに搭載されているので、移植してくれば良いのですが…。Jarのクラスローダとか、まだイマイチ理解できていないので、とりあえず棚上げ。

テストデータの管理というのは、モデリングついでにテストデータも作成・管理ができて、DDL吐きついでに、INSERTも吐いちゃう、という機能を目論んでます。

ところで、これって公開するとしたら、どのような形で公開できるんだろう。明らかにAmaterasERDの派生プロダクトなので、Eclipse Public Licenceが絡んで来ると思いますが…。改変して使ったり、再配布しても良いってのがオープンソースだと思いますが、ライセンスの細かいことを知らないので、なんか「自由」ってのは無意味に恐いです(汗)

自由とは、自らが責任を持つこと、ですからねぇ…。

*1:結構アレゲな機能ですね…

データベースモデリングツール

上記色々あります。商用のもの以外、色々試してみたのですが、いまいちしっくり来ません…。
RDBMSPostgreSQLを採用しているのですが、独自拡張機能を使ったりすると、もうお手上げですね。

最近は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)

formula中のaとかbとかが、t_value.value_id にFKしているようなイメージです。

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:数式や論理式

XMLDB

XMLデータベースという、またとんがったモノに興味を持った。近年話題のアレです。

全てのウェルフォームドXMLを上手に格納できるRDBスキーマなんてのは、あり得るのかな。無いならば、XMLDBを使うしかあるまい。しかし、あり得るのならば、やはりRDBの方が情報も多いし使いやすい…。

無理満塁です。参ったなぁ。

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制約は継承されないので、継承先であらためて指定する必要があります。

続きを読む