はじめに
コジマです。
今回はこういった記事を見て感じたことをつらつらと。
https://qiita.com/fatomy/items/42f33246b23d40859f46
詳しいことはSQLアンチパターンという本に書いてあるのでよかったら買ってみてください。
疑似キー潔癖症を知るきっかけ
テーブルのINSERT処理をTRANSACTION実行して、ROLLBACKしたときに
自動シーケンスのIDだけ元に戻ってくれなかったんですよね。
IDを戻す方法調べてたらたまたま見つけたって感じ。
自分のやろうとしてたことはSQLのアンチパターンであったということを知ったのです。
疑似キー潔癖症って何?
簡単に言うと、自動シーケンスのIDの欠番を埋めようとすることです。
先ほどのように、ROLLBACKしたりするとIDは戻らなくて欠番になってしまうんですね。
ちょっと気持ち悪いのはわかるけど、その欠番を埋めようとしちゃいけないよ。ってのが
疑似キー潔癖症の話です。
なんで欠番を埋めちゃダメなの?
番号を振りなおすの大変じゃないですか。
振りなおしたIDを別テーブルが参照したりしていたら不具合の元です。
じゃあどうすればいいの?
そもそも、シーケンスのIDはID(というかナンバリング)以外の意味を持ってはいけないのです。
そんで欠番は埋めない!です。
さいごに
この話を知って、今携わってるいくつかのテーブルの自動採番やめたいな~~と思うなどしました。
雑記としてゆるっと書きました。
こうしてなにかにつまずいたりしたときに知識は増えていきますね。
この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!
システムエンジニアのつらい部分のあるあるなんかをエンタメにしたチャンネルを作りました。
チャンネルはこちら
つらい部分も楽しくなればと思っているのでよかったらチャンネル登録や高評価してくれたらうれしいです。
以上、コジマでした。