SSブログ

ERDツールについて [DB]

これまで、ER図を作成する事ができるツールは、SI Object Browser ER、Enterprise Architect(EA)、Microsoft Visioの3種類を使ってきました。
他にも、フリーのツールをいくつか試しましたが本格的に使った事があるのは、この3種類です。

ERDツールの主観的特徴
ツール名 リバースエンジニアリング フォワードエンジニアリング リバース・フォワード同期 エンティティ リレーション
SI Object Browser ER 可能 可能 項目ごとにDBとERDの選択可 ● 論理名と物理名を同時に表示はできない。
● 物理モデルと論理モデルを分けてデザインが可能
● リバースエンジニアリング時にDBのコメントの1行目を論理名、2行目以降はコメント項目として設定が可能。
● 曲がる回数に制限がある。
● グリッドにスナップさせる事ができる。
● 制約の物理名を表示する事ができない。
● フォーリンキーのない、論的なリレーションは論理モデルのみに作成する事ができる。
Enterprise Architect(EA) 可能 DDLを生成 不可 ● クラス図を拡張してER図を表現する。
● リバースエンジニアリングでDBコメントを論理名として使用できない。コメント項目として設定される。
● 曲がる位置や回数に制限がなく自由な配置が可能。
● グリッドにスナップさせる事ができない為、調整に手間取る。
● 制約名や使用する項目名を表示が可能。
● フォーリンキーのない、論的なリレーションは表現できない。
Microsoft Visio 可能 一部可 不可 ● 物理名と論理名を同時表示する事ができる。
● リバースエンジニアリングでDBコメントを論理名として使用できない。コメント項目として設定される。
● エンティティの重なり防止機能があり、自動的に再配置する。ただし、反って意図しないエンティティの位置が変わってしまい、リカバリに時間がかかる様である。
● 曲がる位置や回数に制限がなく自由な配置が可能。
● 物理制約名を表示する事ができる。
● フォーリンキーのない、論的なリレーションは表現できない。


SI Object Browser ER は、商用のERD専用ツールとしては圧倒的な価格設定です。
対応するDBが少ない分、専用ツールとしてかゆいところに手が届く作りになっています。
論理モデル/物理モデルと表示を切り替える事ができ、メインモデル/サブモデルとして、モデルの全体と一部を分けて表示する事ができるようなっています。

SI_OBER_Logical.pngObject Borwser ER 論理モデル

SI_OBER_Physical.pngObject Browser ER 物理モデル

Enterprise Architect(EA) は、UMLのドキュメントを含めた一元管理が可能になります。
テーブルと他の要素と関連を登録する事でトレーサビリティが可能です。

EA.pngEnterprise Architect(EA) ERD

Microsoft Visio は、お絵かきソフトの定番です。以前は、お絵かきソフトと言えば花子でした。
お絵かき機能に様々な機能を追加して、電気図や、UML、ER図なども作成可能となっており、1本のツールで様々な図面に対応できるのは大きな特徴です。

ERDの提出ドキュメントとして使うツールは、SI Object Browser ERです。
EAは、モデルの一部をドキュメントとして使う事はあります。
モデル全体の提出ドキュメントとして使う事は、ほとんどありません。
Visioは、Visio Corporationの製品の頃から使っていましたが、現在は使っていません。一部、古いドキュメントをメンテナンスする事はあります。

ほとんどのツールは、リレーションとフォーリンキーは、1対1として考えられており、DBのメンテナンスは、ERDで設計をしてから行う事を前提としています。
SI Object Browser ERは、日本人向けと言いますか、いきなりDBに項目を追加してから、ERDで確認する様な用途に最適な作りになっており、フォーリンキーを使わないDBにも対応する事ができる様になっています。
これらが、良い・悪いと言う議論は有るとは思いますが、既に作ってしまったシステムを救済できる作りになっているのは、ありがたい事です。

SQL文の整形 [DB]

SQL文は、他人が作った物、自分が作った物に関わらず、何度も見直したりチューニングなどを行います。
しかも、個別のSQLファイルだったり、プログラムに埋め込んでいたり、アプリケーションが自動生成したりと様々な形態で存在し、確認する時は、見やすく整形する必要があります。
そんな時に、便利なツールを紹介します。
ACCESSでのクエリで自動生成したSQLを使って試してみます。

ACCESSのクエリで作成したSQL文
SELECT USER.LOGIN_CD, USER.USER_NAME, ORGANIZATION.ORGANIZATION_NAME
FROM ORGANIZATION INNER JOIN ([USER] INNER JOIN [POSITION] ON USER.USER_ID = POSITION.USER_ID) ON ORGANIZATI
ON.ORGANIZATION_ID = POSITION.ORGANIZATION_ID;
SQL文を作る事に意義があるのでしょうね。GUIのツールもありますし、SQL文としての見せ方は、全く持って無頓着です。

オレオレ - 自分で整形
SELECT USER.LOGIN_CD
     , USER.USER_NAME
     , ORGANIZATION.ORGANIZATION_NAME
FROM ORGANIZATION
INNER JOIN ([USER]
             INNER JOIN [POSITION]
             ON USER.USER_ID = POSITION.USER_ID
           )
ON ORGANIZATION.ORGANIZATION_ID = POSITION.ORGANIZATION_ID;
その昔は、自動的に整形する様なツールなんてありませんでした。
自分でいちいち整形してから、調査やチューニングを始めます。

つみきソフトウェアさんの、CSEによる「SQL崩し」
SELECT
    USER.LOGIN_CD ,
    USER.USER_NAME ,
    ORGANIZATION.ORGANIZATION_NAME
FROM
    ORGANIZATION INNER JOIN ( 	[USER] 	INNER JOIN [POSITION] 	ON USER.USER_ID = POSITION.USER_ID ) ON ORGA
NIZATION.ORGANIZATION_ID = POSITION.ORGANIZATION_ID;
会社の同僚に紹介をして頂いたCSEは、今でもお世話になっています。SQL文の整形は、それなりに努力が伺えますが、ちょっと見づらい。
全くのベタで書かれたSQL文を「SQL崩し」を行ってから、「SQL崩し、崩し!」と、言いながら自分で整形します。

プラムシックスさんの、SqlFmtを秀丸マクロで起動
SELECT USER.LOGIN_CD
, USER.USER_NAME
, ORGANIZATION.ORGANIZATION_NAME
FROM ORGANIZATION
INNER JOIN (
	[USER]
	INNER JOIN [POSITION]
	ON USER.USER_ID = POSITION.USER_ID
)
ON ORGANIZATION.ORGANIZATION_ID = POSITION.ORGANIZATION_ID;
SQL文の整形ツールを探していて、偶然見つけた整形ツールです。フリーでしかも細かな設定ができるのが魅力です。エディタや他のアプリケーションへのインタフェースも公開され、非常に太っ腹です。
秀丸から直接呼び出せる、マクロが添付されているので、細かな設定より手軽さを優先してデフォルトのままで使っています。とはいえ、自分で整形した時とよく似た趣味で整形してくれるので、非常に満足しています。
知らない間に、VectorのOracle用ソフトウェアの人気順トップ2位になっていたのですね。

A.Ogawaさんの、OsqlEditによる「SQL整形」
SELECT USER.LOGIN_CD
    ,USER.USER_NAME
    ,ORGANIZATION.ORGANIZATION_NAME
FROM ORGANIZATION INNER JOIN ([USER] INNER JOIN [POSITION] ON USER.USER_ID =
        POSITION.USER_ID)
ON ORGANIZATION.ORGANIZATION_ID = POSITION.ORGANIZATION_ID;
OsqlEditも、別の方ですが、比較的最近に会社の同僚に紹介して頂きました。
やはり、SQL文を直接実行できるエディタ上でそのまま整形できるのが理想です。そこそこそれなりの整形をしてくれます。

見やすさはSqlFmtです。
作業の前に、いちいち自分で整形する事はしなくても良くなりました。
でも、最終的には、自分で直してしまうので、結局、オレオレ なんです。
人ってわがまま...


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。