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です。
作業の前に、いちいち自分で整形する事はしなくても良くなりました。
でも、最終的には、自分で直してしまうので、結局、オレオレ なんです。
人ってわがまま...


テキストのドキュメントの見た目を良くする [IT設計]

テキストで書いたドキュメントについてですが、中身はともかく、見た目だけでも...
なんて事は、言えませんが、やはり見栄えは良くした方が、良いと思います。

とはいえ、やはりただのテキストですので、見た目を良くする為に、一工夫が必要です。
そこで、オレオレ的にルールを決めました。

文章は、章と節、それに箇条書きをうまく組み合わせると、それらしく見えてくる気がします。

章は、「■」文字。
節は、「□」文字。
箇条書きは、「*」、「+」、「-」と決めて、まずは、秀丸に設定をします。
■章章章章章
□節節節節節
    * 箇条書き1
     + 箇条書き2
      - 箇条書き3
        * 箇条書き1-2
         + 箇条書き2-2
          - 箇条書き3-2
[その他]-[ファイルタイプ別の設定]メニューで、[ファイルタイプ別の設定]ダイアログを開いて、強調表示の画面で、強調表示を追加します。

文字列
^■.+
大文字/小文字の区別OFF
単語の検索OFF
正規表現ON
表示方法行の強調1
文字列
^□.+
大文字/小文字の区別OFF
単語の検索OFF
正規表現ON
表示方法行の強調1
箇条書き1
文字列
^(    )+\*.+
大文字/小文字の区別OFF
単語の検索OFF
正規表現ON
表示方法行の強調1
箇条書き2
文字列
^ (    )+\+.+
大文字/小文字の区別OFF
単語の検索OFF
正規表現ON
表示方法行の強調1
箇条書き3
文字列
^  (    )+\-.+
大文字/小文字の区別OFF
単語の検索OFF
正規表現ON
表示方法行の強調1


秀丸で強調表示したままのイメージで印刷できれば、ドキュメントとして見栄えが良くなります。
そこで、秀丸パブリッシャーを使います。
秀丸パブリッシャーは、なぜか、標準ではなく追加インストールします。
便利な機能なので、はじめから使える様になっていれば良いと思うのですが、別になっています。
好みで追加できるので、おまけ感があってそれはそれで良いのかもしれません。

秀丸パブリッシャーを使って印刷する時に、本文BOXのフォント装飾再現の設定をONにして印刷をすると、先ほどの強調表示をそのまま印刷できます。

このままでも良いのですが、前回のクラス図も見栄え良く印刷したいので、WinLPrtを使っています。
WinLPrtは、h_tosh さんの説明の必要がないほどの定番ソフトです。
先ほどの、強調表示は、[書式設定]で設定を行います。

見出し行
見出し行を有効にするON
を含む行を見出しとする
^(■|□|(    )+\*.+| (    )+\+.+|  (    )+\-.+)
別フォントON
フォントスタイルボールド
行書式
罫線文字をつなげるON
細線2/20pt
太線20/20pt

テキストファイルの先頭にタイトル行を付ければ、ずいぶんと見栄えが良くなります。

20080614WinLPrtでテキストを整形.png

秀丸とWinLPrtの連携は、水銀水さん/小田 明夫さんのHMWLP.macを使っています。
秀丸の[マクロ]-[マクロ登録]で、マクロ7に登録することで、
秀丸でドキュメントを編集して、[Ctrl]+[7]キーで、WinLPrtにプレビュー表示して即印刷する事ができる様になります。

もう一つのUMLツール? [IT設計]

もう一つのUMLツールを紹介します。
作ったドキュメントは、Windowsならば新たなツールをインストールしなくても、きっと誰でも見る事ができると思います。

使うツールは、秀丸です。
秀丸は、定番のテキストエディタとして有名ですが、等倍フォントで罫線文字と記号を使ってクラス図や配置図を表現します。
UMLツールでは表現しづらい、文章とダイアグラムのシームレスなドキュメントが作成できます。
なんて、かっこいい事を言ってますが、要するに罫線文字でそれらしい物を描いているだけです。

テキストで表記する事の是非には議論もありますが、何年たっても読む事ができるフォーマットである事、単純なファイル検索でも検索できる事などの利点があります。
あと、何よりもソースコードにコメントとして埋め込む事も可能です。


■クラス図
       ┌─────────┐    ┌─────┐    ┌───────┐
       │ (ユーザリソース) │    │ (ロール) │    │    (機能)    │
       │ClassUserResource ├──┤ClassRole ├──┤ClassFunction │
       ├─────────┤    ├─────┤    ├───────┤
       ├─────────┤    ├─────┤    ├───────┤
       └─────────┘    └─────┘    └───────┘
         △              △
         │              │
 ┌───┴─┐      ┌─┴───────┐
 │ (ユーザ) │      │      (組織)      │
 │ClassUser ├─┬─┤ClassOrganaization│
 ├─────┤  │  ├─────────┤
 ├─────┤  │  ├─────────┤
 └─────┘  │  └─────────┘
                 │
         ┌───┴───┐
         │    (所属)    │
         │ClassPosition │
         ├───────┤
         ├───────┤
         └───────┘



■配置図
                                                            __________
                                                          /        /|
                                    ┌────┐        ┌────┐  |
                                  ┌┴        ├┐      │Client  │  |
                                  │Intranet    ├──→│        │  |
                                  │          ┬┘      │        │  |
                                  └┤      ┬┘        │        │/
                                    └──┬┘          └────┘
                                          │
    _____________________        _________│___________
  /                   /|     /         ↓         /|
 ┌─────────┐  |   ┌──────────┐  |
 │DB Server         │  |   │Web Server          │  |
 │  ┌──────┐│  |   │  ┌───────┐│  |
 │┌┴┐<<table>> ││←──┤┌┴┐<<ASP page>>││  |
 │└┬┘  DBMS    ││  |   │└┬┘xxxシステム ││  |
 │┌┴┐          ││  |   │┌┴┐            ││  |
 │└┬┘          ││  |   │└┬┘            ││  |
 │  └──────┘│/    │  └───────┘│/
 └─────────┘      └──────────┘



■ユースケース図
     ○       ┌──────┐
   ─┼─     │ユースケース│
     │ ───┤            │
    /\      └──────┘



■画面イメージ
   ┌─────────────────────┐
   │xxxシステム                           [×]│
   ├─────────────────────┤
   │                                          │
   │  <!>    ファイルが保存できませんでした. │
   │          アクセス権を確認してください.   │
   │                                          │
   │                   [ OK ]                 │
   └─────────────────────┘

さて、上記のダイアグラムをどの様にして作っているかですが、
秀丸に、秀丸用罫線マクロを組み込んで描いています。
テンキーで、カーソルを移動させながら、罫線を描く事ができます。
少しずつ手を加えて、丸記号や、斜め線を入力できる様にして、UMLを描きやすくしました。
1997年頃に公開された物ですが、なぜか、秀丸のマクロライブラリのページからは無くなってしまっています。
何かあったのでしょうか・・・


ドキュメントを作成する時に [IT設計]

EAで作成したダイアグラムなどをドキュメントにする方法を紹介します。
EAは、ダイアグラムを印刷する機能があります。
さらに、RTFドキュメントを生成する事ができます。
RTFドキュメントは、コメントなどの情報も出力する事ができるので、
コメントに詳細説明を記入して、型など一覧出力する事で、クラスやDB定義表などを作成する事ができます。
RTFドキュメントのテンプレートはカスタマイズが可能なので、その都度、必要な項目のみを出力する様にしています。

そのようにして作られたダイアグラムやRTFドキュメントを組み合わせてドキュメントを作成する事になります。

その時に、日本システムディベロップメントさんのpdfFactory Proを使っています。
pdfFactory Proは、スタンプ機能で、ドキュメントを跨いでPDFファイル内の通しのページ番号を振ったり背景文字を追加する事ができます。
さらに、複数のドキュメントを1つのドキュメントにまとめてからPDFファイルを作成する事ができる上に、文書のセキュリティ設定を自動化できるので便利です。

pdfFactory Proのお気に入り設定
タブ 設定
スタンプ 背景文字 <中央>Draft
フッター <中央><ページ> / <全ページ>
セキュリティ 高レベル
文書の設定を許可しない
マスターパスワード


当然ですが、完成図書はDraftの文字は消してページのみです。

Enterprise Architect(EA)はこんな事もできる [IT設計]

今回は、EAでソースコードの自動生成の紹介をします。
仕事では事情があってEAのソースコードの自動生成はあまり使いません。
実験的なコードや、個人的に作るコードでは自動生成を使います。

...やっと、VB.NETの話題になってきました。

前回に作成したクラス図を使って、今回も手順を追ってみます。

ユーザクラスの属性を追加します。
ユーザクラスを右クリックして、コンテキストメニューから属性を選びます。
20080604-01ユーザの属性追加.png

ユーザ属性ダイアログが表示されます。
プライベートのユーザIDフィールドを作成します。
名前を、m_UserIDとします。サフィックスはm_としました。
型をString、別名にユーザIDとします。
20080604-02ユーザ属性ユーザIDフィールド.png

保存ボタンを押すと、属性一覧に保存されます。
続けて、プロパティを作成します。
ユーザ属性ダイアログで先ほど作成した、m_UserIDを選び、プロパティ・チェックボックスをクリックします。
20080604-03ユーザ属性ユーザIDプロパティの作成.png

すると、プロパティの実装ダイアログが表示されます。
クラスの言語をVB.NETにしているので、プロパティの言語もVB.NETになっています。
プロパティ名は、先ほどのm_のサフィックスを削除した、UserIDに自動的になっています。
可視性は、Publicに、読込(Getter)、書込(Setter)もチェックが付いています。
確認をして、そのままOKボタンを押すだけです。
20080604-04ユーザ属性ユーザIDプロパティの実装.png

ユーザ属性のダイアログに戻ると、プロパティ名の項目が追加され、
UserIDが表示されています。
20080604-05ユーザ属性ユーザIDプロパティの表示.png

以上で、フィールドとプロパティの追加ができます。
ちなみに、サフィックスの設定は、オプションダイアログのソースコードの生成と読み込みにある、
プロパティのGet/Setを作成時にプレフィックスを削除の項目で変更ができます。
20080604-06オプション-ソースコードの生成と読み込み.png

ダイアログを確認します。
属性の所に先ほどのm_UserIDが、操作の所にpropertyステレオタイプとして、UserIDが追加されています。
20080604-07ユーザIDを追加したクラス図.png

同じように他のフィールドやプロパティを追加します。
20080604-08フィールドやプロパティを追加したクラス図.png

クラス名が、論理名になっていますので、物理名に変更します。
元々の名前は、別名に入れておきます。
20080604-09クラス名を物理名に変更.png

名前の付け方はさておき、すべてのクラスの名前を変更します。
20080604-10物理名のクラス図.png

まずは、これでも良いのですが、ドキュメントとして残す場合は、このままだとわかりづらいです。
日本人ですし、英単語で名前付けられても...
そもそも単語、間違えてるじゃん!
って、事も良くあるので、ダイアグラムの書式設定で「別名で表示」を設定すると別名も表示されるようになります。
20080604-11別名も表示したクラス図.png
もしかしたら、別名しか表示されないかもしれません。
その時は、[ツール]-[オプション]で、オプション画面を開いて、[ダイアグラム]の[振る舞い]ページを開きます。
別名の表示方法の設定があるので、別名と名前に設定すると両方表示されるようになります。
プロパティを自動生成した場合は、フィールドの別名が引き継がれないのがちょっと、残念な気がしますが、
フィールド名に別名が表示されているので、我慢できる範囲です。

では次に、ソースコードを自動生成する為の設定を行います。
EAでは、ビューとパッケージで階層構造を設定できますが、その階層のどこをソースコードの名前空間の基準にするかを設定する事ができます。
今回は、ProductNameを基準にします。
20080604-12ProductNameパッケージを名前空間の基準に設定.png

プロジェクトブラウザで見ると、ProductNameのパッケージのアイコンの右下に赤い枠が張り付いています。
ちょっと地味ですが、この表現は気に入ってます。
20080604-13プロジェクトブラウザで名前空間の基準を確認.png

では、そろそろソースコードを自動生成します。
プロジェクトブラウザのProductNameで、右クリックして、ソースコードの生成と読み込みメニューで、ソースコードの生成を実行します。
ソースコードの生成(複数クラス)ダイアログが表示されます。
20080604-14ソースコードの生成.png

ファイルパスの自動生成のチェックをつけて、基準ディレクトリを設定します。
子パッケージをすべて含むのチェックをつけると、先ほどのクラスファイルの一覧が表示されます。
ターゲットファイルも設定されています。
ここで、生成ボタンを押すと、ファイルが自動生成されます。

ユーザクラスを確認してみます。
20080604-15ソースコード-ユーザクラス.png

コード生成のテンプレートを変更できるようです。
コーディング規約などで決められたヘッダなどの記述方法があれば、カスタマイズすれば、それなりに使えるのではいかと思います。
スケルトンの生成としては、十分な機能だと思います。
ここでも、UserNameプロパティが、になっていますので、MyBase.UserResourceName とかに変更する事になるかと思います。 普通はNameなど汎用的な名前にして、わざわざ変更しなくても良い様にするのでしょうけどね。

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