こんにちは!データベースの世界へようこそ。
今日は、PostgreSQLの「数値の扱い方」についてお話ししようと思います。データベース設計の現場で、「とりあえず全部 `numeric` にしておけば間違いないでしょ?」なんて考えていると、後で意外な落とし穴にハマることがあるんです。
数値の型選びは、いわば「お買い物に行くときのバッグ選び」のようなもの。中身に合わせて最適なバッグを選ばないと、持ち運びにくかったり、中身がこぼれ落ちてしまったりしますよね。
一緒に、それぞれの「バッグ」の特性を見ていきましょう。
—
1. 整数型:カチッとした箱(smallint, integer, bigint)
まずは、小数点を含まない「整数」のための型です。これは、「決まった大きさの頑丈な箱」だと思ってください。
- smallint: 小さな小箱。年齢や、数えるほどの人数などに。
- integer: 標準的な箱。ID番号や、在庫数など、一番よく使う「万能選手」です。
- bigint: 巨大なコンテナ。アクセスログのカウントや、非常に大きな金額の計算に使います。
なぜこれらを使うの?
整数型は、データベースにとって非常に「計算しやすい」形です。サイズが決まっているから、メモリの節約にもなるし、計算スピードも爆速。カウントアップやIDの管理には、迷わずこの「箱」を選びましょう。
—
2. 任意精度数値型(numeric/decimal):魔法の伸縮バッグ
次に、お金の計算などで絶対に欠かせない `numeric` です。これは、「中身に合わせて自由自在に形を変えられる、魔法のバッグ」です。
例えば「100.50円」といった厳密な数値を扱うとき、浮動小数点型(後述します)を使うと、計算の過程で「0.0000000001」みたいな誤差が出てしまうことがあります。1円のズレも許されない決済システムでそんなことが起きたら大変ですよね。
- メリット: どんなに大きな数でも、小数点以下何桁でも、指定した通りに正確に保持できる。
- デメリット: 自由自在に変形できる分、計算コストは他の型よりちょっとだけ重め。
使うべきシーン: お金、重さ、長さなど、厳密さが求められるデータには、迷わずこれを選んでください。
—
3. 浮動小数点型(real, double precision):大雑把な広角レンズ
最後に、`real` や `double precision` です。これらは、「広大な風景をざっくり撮影する広角レンズ」のようなものです。
天文学的な数値や、非常に複雑な科学計算のように、「10のマイナス何乗」といった、ものすごく大きかったり小さかったりする値を扱うのが得意です。
- 注意点: 便利な反面、「細かい数字」は切り捨てたり、近似値で処理したりします。そのため、「1+1が厳密に2にならない」ようなことが起こり得ます。「だいたいこれくらいの値」がわかればいい、という用途には最高ですが、お会計の計算には絶対に使ってはいけません。
—
結局、どう選べばいいの?
迷ったときは、こんなふうに考えてみてください。
1. 「小数点はある?」
- ない → 整数型(迷ったら `integer`)
- ある → 次へ
2. 「その数値は、厳密な正確さが必要?」
- 必要(お金など) → `numeric`
- 不要(科学計算や統計データなど) → `double precision`
最初は難しく感じるかもしれませんが、「このデータはどのバッグに入れるのが一番ピッタリかな?」とイメージするだけで、データベース設計はぐっと楽しくなりますよ。
あまり難しく考えすぎず、まずは「整数は integer、お金は numeric」と覚えておくだけで、現場では十分頼れる設計ができるはずです。
もし「こんなデータはどうすればいいの?」という疑問があれば、いつでも聞いてくださいね。一緒に最適な「バッグ」を探しましょう!
コメント