Longはbigintであってnumericではない、という話
先日、自分の耳を疑いたくなるような話が出たので、その衝撃をそのまま書き記しておこうと思う。
とある現場でのスーパーバイザー(笑)の一言。
「なんでnumericじゃなくてbigintを使用するのか、その理由を教えて下さい」
などという、意味不明な不満げな発言があった。
使用しているのはPostgres。longの値を格納するための項目をbigintに変更申請をあげたときに出た一言だ。もとはvarcharかつPK(普通にID項目)というとんでも設計だったのだが。。
もともと、DBど素人臭い発言が目立っていたので、多分ちょっとOracleを触ってSQLをちょろっと書いた程度なんだろうな、とは思っていたが。。スーパーバイザー(笑)というくらいなのだから、定義系はいけるだろういう思いが見事に打ち砕かれた。この手の人間は、プライドがやたら高くて扱いが本当にめんどくさいこともあって、無視していたのだが、オープンチャットで追い打ちをかけるように質問を投げかけてくる。
その発言自体がどれだけ恥ずかしいことなのか、どうも本人は気付いていないらしい。たぶん、今も気づいていないだろう。数値型でも整数と可変の精度は扱いがまるで違う。マニュアルくらい読みなさいよ、と言いたかったが、ぐっと我慢して説明を行った。
■bigintとは
8バイトの整数。桁数が大きいのであまり使用しない。smallintとかintegerで事足りるなら、そのほうが良い。smallint,integer,bigintをPKにしておくと、SQLのコストがいい感じになるのでお勧め。
■numericとは
正確な精度を持つ小数点込みの数値。decimalと同じような扱い。お金に絡む場合は何となくdecimalって感じで、確率的(ガチャとか?)なもとか軽量的なものはnumericを使うのがいいと思う。正確な精度を持っているので、計算によるブレが「ほぼ」発生しない。ただし、プログラムのdecimalと同じ欠点があって、重い&遅い。うまいことトレードオフする必要がある。
ついでにPostgresのマニュアルも添付してやったら、それっきりだんまり。。
なかなかモチベーションの下がるやり取りではあったが、反面教師と考えればいい経験だったと思う。
経験年数がかさんでベテランに近づくにつれて、妙にプライドが高くなって、本来であれば気付けるはずのことを知ることがないまま先に進んでしまうことがある。
しかし、このレベルの質問が飛んでくるのはさすがに初めての経験だった。。
コメントを残す