データベース利用時のキーをbigintにする必要があるか
結構これに悩む開発者は多いのではなかろうか。
そもそもこういうことに悩むのが間違いの元だと思う。システム開発者たるもの、事前の想定があってそれに対しての開発をするわけで、適当に「将来増加するかもしれないから」なんてことだけで開発してはいけない(とは言っても・・・とも思うけれど)。
MySQLで主キーにauto_incrementを設定すると仮定する。カラムの型がintegerでunsignedの場合最大約42億まで値を確保できる。42億、というと実際には手に届かないが、接したことのある数字である(算数の計算とかの話)。「億」という言葉が問題なのかもしれない。じゃあ「兆」は、「京」はみたいなことをいうと切りがない。なので、まず実際に使用すると思われる量を計算しなくてはならない。
42億というと1日1件の処理で値が1増加すると仮定すれば、約1150万年も使えるわけだ。その頃には人類は絶滅しているんじゃないかと思うので、すでに考えなくていい。
1日100件の処理が行われるとすると、約1万1千年使えるわけだ。人類が絶滅していなかったと仮定してもMySQLは存在しないだろう。じゃ、やっぱり考えなくていい。
1件あたりの処理で値が100増えるとすれば(1日100件の処理で)、101年となるわけだ。さすがに人類はまだ絶滅していなさそうだし、ひょっとしたらMySQLもまだあるかもしれない。でも100年前のシステムの考え方が通用するだろうか。そもそもそれを使う会社が100年先も存在するだろうか(ま、発注者にはそんな事言えないけど)。となれば、これでも考えなくていい。
といった具合に、見積もりを立てれば問題ない。そしてそれを仕様書にまとめて提出する(できれば「こういう仕様でいきます」という事前確認をしておくほうがいい)。