SQL整数型をSequelize DataTypesにマッピングする

INT、BIGINT、SMALLINT、TINYINT、MEDIUMINTなどのSQL整数型がSequelize DataTypesの対応にサイズ考慮も含めてどのようにマッピングされるかを学びます。

Basic Models

詳細な説明

SQL整数型とSequelize DataTypes

SQLデータベースはストレージ最適化のために複数の整数サイズをサポートしています。Sequelizeは各サイズに対応する専用のDataTypes定数を提供し、コンバーターは各型を正確にマッピングします。

標準マッピング表

SQL型 Sequelize DataType ストレージ 範囲
TINYINT DataTypes.TINYINT 1バイト -128〜127
SMALLINT DataTypes.SMALLINT 2バイト -32,768〜32,767
MEDIUMINT DataTypes.MEDIUMINT 3バイト -8M〜8M
INT / INTEGER DataTypes.INTEGER 4バイト -2B〜2B
BIGINT DataTypes.BIGINT 8バイト 非常に大きい

変換例

CREATE TABLE metrics (
  id BIGINT PRIMARY KEY,
  status_code SMALLINT NOT NULL,
  retry_count TINYINT DEFAULT 0,
  request_count INTEGER NOT NULL,
  byte_size BIGINT
);
Metric.init({
  id: { type: DataTypes.BIGINT, primaryKey: true, allowNull: false },
  status_code: { type: DataTypes.SMALLINT, allowNull: false },
  retry_count: { type: DataTypes.TINYINT, allowNull: true, defaultValue: 0 },
  request_count: { type: DataTypes.INTEGER, allowNull: false },
  byte_size: { type: DataTypes.BIGINT, allowNull: true },
}, { ... });

TINYINT(1)ブーリアンパターン

MySQLはTINYINT(1)を事実上のブーリアン型として使用します。コンバーターはこの特定のパターンを検出し、DataTypes.TINYINTの代わりにDataTypes.BOOLEANにマッピングします:

is_verified TINYINT(1) DEFAULT 0
-- 変換後 -->
is_verified: { type: DataTypes.BOOLEAN, defaultValue: false }

PostgreSQLのエイリアス

PostgreSQLはINT2(SMALLINT)、INT4(INTEGER)、INT8(BIGINT)のエイリアスを提供します。コンバーターはこれらすべてを認識し、適切なSequelize DataTypeにマッピングします。SERIALBIGSERIALはそれぞれ自動インクリメントのINTEGERBIGINTとして扱われます。

ユースケース

カウンター、バイトサイズ、ステータスコードを格納するテーブルを持つアナリティクスシステムを設計しており、Sequelizeで正しい整数サイズを選択することがストレージ効率とクエリが返すJavaScriptの数値型の両方に影響する場合。

試してみる — SQL to Sequelize Model

フルツールを開く