制約つけるの嫌いな人はいるよね。
でも、ER図やテーブル定義書に
「受注と受注明細は"0...*"の関係にある」
「受注.確定フラグは、0:未確定、1:仮受注、2:確定の意」
って書くなら、foreign-key制約つけてcheck制約つけてほしい。
「だってテストデータ作るときに面倒じゃないですか」とか
言われるんだけど、設計はしたけど実装しないってのは
手抜き工事みたいなもんだ。
FKは遅くなるから付けないってのが一般的では
制約に関しては、ケースバイケースなんだろうなぁ。
漏れはNOT NULLは積極的につける派だけど、
FKは時と場合で、フレームワークとかの比較的最新の技術で
組む時はFKだけど、COBOLとかの古代言語系の時は
つけない。と言うかCOBOLerが理解できないだろうし、
更新系で速度命の場合は、つけないけど。
ただ速度云々に関しては制約つけた方が安全性が高まるから
少しばかし遅くなっても制約つけるべきだとオモ。
オペレータが2重にJOB起動させたけど制約で例外が発生して
助かった例もあるしな。
FKは逆方向の索引をつけるかどうか悩む。
制約の話は定期的に出てくるなあ。
制約はデータの整合性を保つ最後の砦だと思ってるので付けるなぁ
うちではこんな感じで使い分けています。
主キー制約、ユニーク制約:索引と密接にかかわるのでもちろん使う
NOT NULL制約:もちろん使う
CHECK制約:アプリ任せでほとんど使わない
参照整合性制約:
親子レコードのケースでは基本的に使う
複数の箇所で使うようなコードには基本的に使わない
とりあえず制約は付けておくね。
最後にパフォーマンスが微妙に足りないときに削るかどうか考えるw
結合テスト段階で制約違反出した奴はペナルティww
参照整合制約の何が嫌かって、インポート時に制約で引っかかるのが嫌
>>788 参照整合性制約はたとえば
注文と注文詳細では使うが
店舗と都道府県では使わない(都道府県コードを複数箇所で使う)
ってことですか?
>790
インポート時に制約を無効にすればいいじゃない