細かすぎて伝わらないツールだ。。。
キーレスエントリなスキーマ
SQLアンチパターン に「外部キー嫌い(キーレスエントリ)」というのがあります。
外部キー制約(FOREIGN KEY)の設定をしないデータベース設計です。
(最近の)Ruby on Railsはどうなのかわかりませんが、
例えばCakePHPだと、テーブル名やフィールド名が(Railsと同じ)命名規則に沿っていると外部キーを自動で判定し、bakeしたタイミングで \Cake\ORM\RulesChecker#existsIn()
という外部キー制約をサポートするようなコードが生成されます。
そして、そのままキーレスエントリなスキーマで開発が進むことがよくあります。
(ほかにも理由があったりもしますが)
(本エントリでは、キーレスエントリ自身については言及しません)
それでもER図を生成したい
ところで、
Rails/Cakeなエンジニアは、外部キー制約を設定していなくても、命名規則に沿っていればテーブル名やフィールド名を見て外部キーかどうかを判断できます。
しかし、ER図をスキーマからリバースエンジニアリングして生成くれるような世の中の便利ツール がそれらを判定してくれることは少ないです。
rails-erd
などでER図を生成できたりはしますが、残念ながら自分の主戦場はRailsではなくCakePHPなのです。( model_info は懐かしい思い出 )
便利なER図生成ツールは使いたい。でも外部キー制約は今ない。
というわけで、
じゃあ、テンポラリに外部キー制約をはっちゃえばいいじゃん。そしてその後外せばいい
というかなり強引なアプローチのためのツールを作りました。
tmpfk
RailsやCakePHPの命名規則に沿って外部キーを付けたり外したりするツールです。
必要なもの
インストール
$ gem install tmpfk
使い方
使い方は簡単です。
対象データベースに外部キーを一気につけるコマンド add
と
$ tmpfk add -c config.yml
対象データベースからtmpfkでつけた外部キーのみを一気に外すコマンド drop
$ tmpfk drop -c config.yml
だけです。
簡単だからといって、運用を開始しているデータベースに直接 tmpfk add
するのはヤメましょう。
(別途スキーマのみのデータベースを用意するなどしましょう)
ただ、
もし、
「これからも外部キー制約をつけたまま生きていくんだ!」と思ったら --prefix
オプションがありますので、ある程度本気度のある外部キー制約名をつけましょう。
$ tmpfk add -c production_config.yml --prefix ore-ha-honki-da_
というわけで
ER図の自動生成をあきらめたキーレスエントリな皆さん。
使ってみて下さい。
$ tmpfk drop -c production_config.yml --prefix ore-ha-honki-da_