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

砂日記ばーじょん2.0

IT関連の仕事中に浮かんできたポエムとか読んだ本の感想とか書いていきます。

SQLアンチパターン読了 外部キーの取り扱いは難しい

SQLアンチパターンを読んだ

読了後、ビンゴをやった。

ビンゴの結果

f:id:snufkin127:20170127023651p:plain
縦一列に綺麗なビンゴが並びました。

4章キーレスエントリ(外部キー嫌い)について

丸ついたもの全部の体験や感想を話すと長いので、ひとつだけ。

僕はSIer企業に就職し、9年間色んな現場でシステム構築に関わったが、
外部キーをきちんと扱うシステムに出会ったことが一度もない。 どこのシステムでも参照整合性はプログラムで担保していた。

理由は本書にも書かれている通り、

外部キー制約を省略すれば、データベース設計がシンプルになり、
柔軟性が高まり、実行速度が速くなると思っている読者もいるかもしれません。

 

多くの開発者が外部キーを避けるのは、
複数のテーブルの関連し合う列を更新する際に、
外部キー制約が邪魔になると感じるからです。

このあたりに尽きる。
他にも、テスト環境でのプログラムの動作確認時やテストのときに、レコードをちょっと削除したり更新したいなーと思っても、
参照制約で関連しているために、テスト箇所とは直接関係のないテーブルを更新しなければならなかったりするのがしんどかったりする。

外部キーを正しく扱えるプログラマーは残念ながら多くなく、
コードで参照整合性を保証する手段が多く選ばれるのだと思う。

小規模のシステムならいけるかもしれないが、
システム規模が大きくなると複雑度も増大するので、
制約に振り回されず外部キーを使いこなすというのはなかなか難しい。
ずっと課題とは思っているものの、中々解決できないことの一つです。