データベース設計における通貨コードのベストプラクティス

データベースでの通貨コードと金額の保存のベストプラクティス。カラム型、インデックス、CHAR(3)とenum、補助単位保存、スキーマ設計パターンを解説。

Development

詳細な説明

データベースでの通貨データの保存

通貨コードと金額のデータベースでの保存方法は、正確性、パフォーマンス、柔軟性に長期的な影響があります。

通貨コードカラム

-- 推奨:ISO 4217コード用のCHAR(3)
currency CHAR(3) NOT NULL DEFAULT 'USD'

-- 非推奨:ENUM(柔軟性がなく、新しい通貨の追加にALTER TABLEが必要)
currency ENUM('USD', 'EUR', 'GBP')

CHAR(3)の理由:

  • ISO 4217コードは常に正確に3文字
  • 固定幅はインデックスと比較に効率的

金額カラム

-- 推奨:補助単位で整数として保存
amount BIGINT NOT NULL

-- 許容:人間が読める保存にはDECIMAL
amount DECIMAL(19, 4) NOT NULL

-- 非推奨:FLOATやDOUBLE
amount FLOAT  -- 精度損失!0.1 + 0.2 != 0.3

主要原則

  1. 金額に浮動小数点を絶対使用しない
  2. 金額と一緒に常に通貨コードを保存
  3. 可能な限り整数(補助単位)を使用
  4. 通貨カラムにインデックスを付ける
  5. 変換時の為替レートを保存
  6. 通貨コードにはCHAR(3)を使用(TEXTやENUMではなく)

ユースケース

金融アプリケーション、ECプラットフォーム、または複数通貨を扱うシステムのスキーマを設計するデータベースアーキテクトやバックエンド開発者は、これらの決定を早期に行う必要があります。FLOATからBIGINTへの変更や既存テーブルへの通貨カラムの追加は、本番環境ではコストがかかります。

試してみる — Currency Code Reference

フルツールを開く