GANCHIKU.com

カルチャーショック。テーブルには、制約を付けない。

2006年6月17日

railsの勉強会に行ってきた。私は、普段rubyも使わなければ、railsも使っていない。それでもrailsの考え方は、アジャイルでいいよなー、と思っているので参加してきた。

そして、一つ疑問に思っていたところが解決された。それは、テーブルの制約に関してだ。私は、体系的にDB設計を学んだわけではないが、DBの設計はガチガチにやるのが普通だと前まで思っていたのだ。普段は、PostgreSQLを使っているからなのかもしれないが、外部キーや、文字数チェックなども、スキーマに定義している。いや、するべきだと思っている。逆に,外部キーとして扱っているのに、REFERENCEを貼ってないと、「誰だ!こんな設計したやつは!」と思ってしまう。

しかし、今日聞いた話だと、外部キーも、文字数チェックとかもモデルで全部やるべきだというのだ。つまり、今まで私は、この辺の制約は、DBのレイヤーで制御するべきだとずーーーーーっと思ってきたのだが、そうではないらしい。その代わりに、アプリケーションのレイヤーで制御するべきだと言うことだったのだ。なので、手動でDBを触るこはしないというのが前提なのであう。DHHもこれを推奨していると聞いたが、本当にカルチャーショック。ただ例外として、他のシステムと連携する必要がある際などは、ちゃんと外部キーとかも指定する必要があるとのこと。

確かに、DBの方で制約をつけて制御することと、バリデーションで制御する二度手間はうまい連携ではないよなー。DBの制約をつけたからって、入れるの失敗することは確かだけど、どうせバリデーションでかけるのだから一緒なような気もしてきた。なるほど。。。。
でも、なんかDB屋に言わせたら「ありえん!」と言いそうだなぁ。私が言ってしまったくらいだから。

このカルチャーショックを知ることができたことは、とてもよい収穫だったと思う。

Shin Ohno 2003-2012