@kyanny's blog

自分の不名誉になるような考えを最初に大胆に表明することは、自立への第一歩となる - ニーチェ ドイツ哲学者

DataGrip が生成する ER 図から不要なテーブルを消したくていろいろ試しているがなかなかうまくいかない。

Selecting Tables for DataGrip Diagram – IDEs Support (IntelliJ Platform) | JetBrains

同じ問題に言及している人。解決策は提示されていない。

試したこと

UML (XML) エクスポート→ ER 図を GUI 編集できるツールで読み込み(→ツール上で不要なテーブルを削除→画像としてエクスポート)

ER 図を GUI で編集できる(できそうな)ツールは多過ぎて全部試していられない。

かつ、無料で商用利用できるものは少なそうな雰囲気なので、せっかく使えるやつが見つかったとしても仕事で使うわけにはいかない(これだけのためにライセンス費用を払う気にはなれない。この手のツールはそれなりの値段もするし)。

オープンソースライセンスのやつなら安心だろうということで主に Eclipse 周辺でいくつか試したが、

  • Eclipse Modeling Tools
  • ↑ + Papyrus Plugin
  • ↑ + ERMaster
    • この辺は DataGrip がエクスポートした .uml を読んでも図を描いてくれない
  • Papyrus が単体の .app として配布されてるやつ
    • macOS のセキュリティの関係で起動すらできなかった
  • Umlet とかいうツール
    • これも .uml を図にしてくれない

この辺で「ひょっとして DataGrip がエクスポートする .uml ファイルって、 UML と言いつつ独自仕様の XML ファイルなんじゃ・・?」と勘ぐる。裏は取れてないが、そんな予感がする。

UML (XML) エクスポート→テキストエディタで編集→ DataGrip で再読み込み

適当に作ったテーブルだとうまくいったが dvdrental で試したところ、編集後の .uml ファイルを DataGrip に読ませると消したテーブル情報を復元して ER 図を描写しやがる。なぜ復元されてしまうのかカラクリがわからない。おそらく内部的にスキーマ定義と照合しているのだと思う。 XML ファイルを極限まで削ってもダメだったので。

うまくいくケースでは今のところこれが一番早くて楽だが、うまくいかない(復元される)ケースだと手も足も出ないのが悔しい。

必要なテーブルの分だけ DDL を別データベース・別スキーマにコピー(→コピー先で ER 図を出力)

最後の手段、流石にこれならいけるだろうと思っていたがうまくいかなかった。 PostgreSQL に慣れてないせいもあり、

  • 同一データベース内に別スキーマを作ってそこに DDL を流す
    • sequence とかはデータベースレベルで定義されるので重複が発生してエラー
  • 別データベース内に DDL を流す
    • ↑とは逆に sequence とかが未定義なのでエラー
  • 別データベース内にスキーマ丸ごと DDL を流す(→不要なテーブルを削除)
    • 消したい(ER 図に出したくない)テーブルへの外部キーがあると消せない
    • 残したいテーブルから消したいテーブルへの外部キーを全部外す必要がある

と、相当面倒くさいことがわかった。ちまちま外部キーを消したりすればいずれできるとは思うが、やってられんと思って心が折れた。とてもじゃないが他人に勧められない。


まだ試してないが有望かもしれないオプション

ER 図を GUI で操作できるツールから直接 DB に繋ぐ→そのツールでうまいことやる方法があることを祈って探す

探し当てる手間が多そうなので有望でもない。運が良ければあたりを早く弾ける。もしくは諦めて定評ある有料ツールを買う(astar とか)