読者です 読者をやめる 読者になる 読者になる

"キーレスエントリ"なスキーマに、テンポラリな外部キーを設定するツール tmpfk を作った

Ruby

細かすぎて伝わらないツールだ。。。

f:id:k1LoW:20170217085602p:plain

キーレスエントリなスキーマ

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

github.com

RailsCakePHP命名規則に沿って外部キーを付けたり外したりするツールです。

必要なもの

インストール

$ 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_