SQL主キーとオートインクリメントをSequelizeに変換する
SQL PRIMARY KEY、SERIAL、AUTO_INCREMENT、IDENTITYカラムがSequelizeモデル定義でprimaryKeyとautoIncrementオプションにどのように変換されるかを解説します。
Associations
詳細な説明
Sequelizeでの主キーとオートインクリメント
主キーはすべてのデータベースモデルの基盤です。コンバーターは主キーとオートインクリメントカラムを定義するすべての一般的なSQLパターンを処理します。
SERIAL(PostgreSQL)
PostgreSQLのSERIALはシーケンス付きオートインクリメント整数の省略形です:
id SERIAL PRIMARY KEY
-- 変換後 -->
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false }
BIGSERIALは同じオプションでDataTypes.BIGINTにマッピングされます。
AUTO_INCREMENT(MySQL)
MySQLのAUTO_INCREMENTキーワードは直接autoIncrement: trueにマッピングされます:
id INT AUTO_INCREMENT PRIMARY KEY
-- 変換後 -->
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false }
IDENTITY(SQL Server)
SQL ServerはオートインクリメントカラムにIDENTITY(1,1)を使用します:
id INT IDENTITY(1,1) PRIMARY KEY
-- 変換後 -->
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false }
UUID主キー
UUIDベースの主キーの場合、SQL型はDataTypes.UUIDにマッピングされます:
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
-- 変換後 -->
id: { type: DataTypes.UUID, primaryKey: true, defaultValue: DataTypes.UUIDV4, allowNull: false }
Sequelizeの動作
autoIncrement: trueが設定されている場合、Sequelizeは:
- INSERT文からカラムを省略(データベースに値の割り当てを委任)
- 挿入後に生成された値を読み戻す
- モデルインスタンスに自動的に設定
TypeScriptモードでは、オートインクリメントフィールドはレコード作成時に提供する必要がないため、CreationAttributes型でオプショナルとしてマークされます。
ユースケース
AUTO_INCREMENTカラムを持つMySQLデータベースをSERIALのPostgreSQLに移行しており、Sequelizeモデルは基盤となるデータベースに関係なく同じautoIncrement: trueオプションを使用するため、移行がシームレスになる場合。