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システムを構築しています。

試してみる — Prisma to SQL Schema

フルツールを開く