おれオレ SQLアンチパターン ~勝手な約束~
本日ちょっと痛い目を見たので、後続のため残しておきます。
開発中のアプリは Oracle の Sequence により採番した値をIDとして使用している。
問題となった画面は、とあるテーブルの値をレコード作成順に表示する仕様になっている。
本来であれば登録日にてソートをかけるべきだが、ちょっとした理由により登録日を使用することが出来なくなったため、IDをソート順に使用した。。。
知っていれば当たり前の話なんですが、Oracle の Sequence は設定により登録順とシーケンスの順番が一致しないということが起こります。
(create sequence するときに、order オプション付けないと順番が保障されなくなります)
そう、画面に表示したレコードは想定した順番にはなっていなかったのです。
今回は思い込みで設計バグを埋め込んでしまったので、「勝手な約束」というタイトルをつけてみました。
IDに一意性以外の役割を持たすのが問題な気もするので、「多目的ID」でも良かった気もしますね。
若手の皆様は私の屍を越えて行ってください。
恥ずかしいわ~~~