データベース設計における通貨コードのベストプラクティス
データベースでの通貨コードと金額の保存のベストプラクティス。カラム型、インデックス、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
主要原則
- 金額に浮動小数点を絶対使用しない
- 金額と一緒に常に通貨コードを保存
- 可能な限り整数(補助単位)を使用
- 通貨カラムにインデックスを付ける
- 変換時の為替レートを保存
- 通貨コードにはCHAR(3)を使用(TEXTやENUMではなく)
ユースケース
金融アプリケーション、ECプラットフォーム、または複数通貨を扱うシステムのスキーマを設計するデータベースアーキテクトやバックエンド開発者は、これらの決定を早期に行う必要があります。FLOATからBIGINTへの変更や既存テーブルへの通貨カラムの追加は、本番環境ではコストがかかります。