SQLのDEFAULT値をSequelizeのdefaultValueに変換する
定数、ブーリアン、タイムスタンプ、関数呼び出しを含むSQL DEFAULT句がSequelizeのdefaultValueオプションにどのようにマッピングされるかを学びます。
Advanced Features
詳細な説明
SequelizeでのDEFAULT値
SQLカラムはINSERT時に明示的な値が提供されない場合に適用されるデフォルト値を持つことができます。Sequelizeはこれをフィールド定義のdefaultValueオプションにマッピングします。
定数デフォルト
文字列と数値の定数は直接変換されます:
status VARCHAR(20) DEFAULT 'active'
-- 変換後 -->
status: { type: DataTypes.STRING(20), defaultValue: 'active' }
retry_count INTEGER DEFAULT 3
-- 変換後 -->
retry_count: { type: DataTypes.INTEGER, defaultValue: 3 }
ブーリアンデフォルト
コンバーターはさまざまなブーリアン表現を正規化します:
is_active BOOLEAN DEFAULT TRUE --> defaultValue: true
is_deleted BOOLEAN DEFAULT FALSE --> defaultValue: false
is_verified BOOLEAN DEFAULT 1 --> defaultValue: true
タイムスタンプデフォルト
SQLタイムスタンプ関数はSequelize定数にマッピングされます:
| SQLデフォルト | Sequelizeデフォルト |
|---|---|
CURRENT_TIMESTAMP |
DataTypes.NOW |
NOW() |
DataTypes.NOW |
CURRENT_TIMESTAMP() |
DataTypes.NOW |
UUID生成
UUID生成関数はSequelizeの組み込みUUIDジェネレーターにマッピングされます:
| SQLデフォルト | Sequelizeデフォルト |
|---|---|
gen_random_uuid() |
DataTypes.UUIDV4 |
uuid_generate_v4() |
DataTypes.UUIDV4 |
UUID() |
DataTypes.UUIDV4 |
NEWID()(SQL Server) |
DataTypes.UUIDV4 |
データベース関数
その他のデータベース関数の場合、コンバーターはsequelize.literal()を使用します:
score DECIMAL DEFAULT RANDOM()
-- 変換後 -->
score: { type: DataTypes.DECIMAL, defaultValue: sequelize.literal('RANDOM()') }
Sequelizeの動作
defaultValueが設定されている場合、SequelizeはModel.build()の直後にJavaScriptモデルインスタンスにそれを含めます — デフォルトを確認するためにデータベースに保存する必要はありません。ただし、データベースレベルのデフォルト(sequelize.literal経由)はINSERT実行後にのみ解決されます。
ユースケース
静的値、ブーリアンフラグ、タイムスタンプ、UUID生成など、さまざまなデフォルト戦略を使用するカラムを持つデータベースを移行しており、コンバーターが各パターンを適切なSequelize定数またはリテラルにマッピングする場合。