Prismaの数値型からSQL INTEGER、BIGINT、FLOAT、DECIMALへの変換
Prisma Int、BigInt、Float、Decimal フィールドがSQL数値型にどのようにマッピングされるかを学びます。PostgreSQL、MySQL、SQLiteダイアレクト間の違いを解説します。
Field Types
詳細な説明
数値型のマッピング
Prismaは精度と範囲の要件に応じて、異なるSQLカラム型にマッピングされる4つの数値スカラー型を提供します。
デフォルトのマッピング
| Prisma型 | PostgreSQL | MySQL | SQLite |
|---|---|---|---|
Int |
INTEGER | INTEGER | INTEGER |
BigInt |
BIGINT | BIGINT | BIGINT |
Float |
DOUBLE PRECISION | DOUBLE | DOUBLE |
Decimal |
DECIMAL(10,2) | DECIMAL(10,2) | DECIMAL(10,2) |
Prismaスキーマの例
model Product {
id Int @id @default(autoincrement())
quantity Int @default(0)
viewCount BigInt @default(0)
weight Float?
price Decimal
rating Float @default(0.0)
@@map("products")
}
生成されるSQL(PostgreSQL)
CREATE TABLE products (
id SERIAL PRIMARY KEY,
quantity INTEGER NOT NULL DEFAULT 0,
view_count BIGINT NOT NULL DEFAULT 0,
weight DOUBLE PRECISION,
price DECIMAL(10,2) NOT NULL,
rating DOUBLE PRECISION NOT NULL DEFAULT 0.0
);
各型の使い分け
- Int: 約21億までの標準整数。ID、カウント、年齢、数量に使用。
- BigInt: Int範囲を超える大きな整数。ミリ秒タイムスタンプ、大きなカウンター、snowflake IDに使用。
- Float: 倍精度浮動小数点。正確な精度が重要でない科学計算、座標、レーティングに使用。
- Decimal: 正確な精度を持つ固定小数点。丸め誤差が許容されない金額、価格、財務計算に使用。
BigIntでのオートインクリメント
BigIntを@default(autoincrement())と共に使用すると、PostgreSQLではSERIALの代わりにBIGSERIALが生成されます:
model Event {
id BigInt @id @default(autoincrement())
}
PostgreSQLではid BIGSERIAL PRIMARY KEYが生成されます。
ユースケース
商品価格に正確な金額計算のためDECIMALを使用し、閲覧数に人気商品で数十億のページビューを処理できるBIGINTを必要とするECシステムを構築しています。