Gerador de Sequelize model a partir de tabela
Gera um model Sequelize (JS) com sequelize.define, colunas e timestamps — a partir do nome da tabela.
—
Models Sequelize: associations, migrations e validações
O Sequelize é o ORM JavaScript pioneiro para Node.js, criado por Sascha Depold em 2011 — anos antes do TypeScript virar mainstream e bem antes do Prisma existir. Usa uma API assíncrona baseada em Promises sobre classes ES6 e suporta uma ampla lista de dialetos SQL: PostgreSQL, MySQL, MariaDB, SQLite, MSSQL, Snowflake e DB2. A maturidade é seu maior trunfo — mais de uma década em produção — enquanto a API imperativa e um pouco verbosa é a contrapartida que empurrou projetos novos para Prisma ou Drizzle.
Este gerador monta um sequelize.define inicial; o restante deste guia cobre a sintaxe completa de definição de modelos, associations, migrations com sequelize-cli, hooks, validações, transações e como o Sequelize se compara a TypeORM e Prisma em 2026.
Definindo um model
const { DataTypes } = require('sequelize');
const User = sequelize.define('User', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
name: { type: DataTypes.STRING, allowNull: false },
email: {
type: DataTypes.STRING,
unique: true,
validate: { isEmail: true },
},
}, {
timestamps: true,
paranoid: true, // soft delete via deletedAt
});
Tipos comuns: STRING, TEXT, INTEGER, BIGINT, FLOAT, DECIMAL, BOOLEAN, DATE, UUID, JSON, JSONB (Postgres), ENUM, ARRAY. Opções no nível da coluna: allowNull, unique, defaultValue, primaryKey, autoIncrement, field (mapeia para outro nome de coluna), references (foreign key).
Associations e eager loading
O Sequelize representa relacionamentos com quatro helpers: hasOne, hasMany, belongsTo e belongsToMany. Declare depois de definir cada model:
User.hasMany(Post, { foreignKey: 'userId' });
Post.belongsTo(User, { foreignKey: 'userId' });
Article.belongsToMany(Tag, { through: 'ArticleTags' });
// Eager loading — evita N+1
const users = await User.findAll({
include: [{ model: Post, where: { published: true } }],
});
A opção include gera um JOIN; sem ela, acessar user.posts exige uma query separada e dispara o clássico problema N+1.
Migrations, hooks, transações
Migrations são gerenciadas pelo sequelize-cli: rode npx sequelize-cli migration:generate --name add-user-email para gerar um arquivo com up() e down(); npx sequelize-cli db:migrate aplica as pendentes. Hooks (lifecycle) permitem interceptar eventos: beforeCreate, afterUpdate, beforeDestroy e outros — úteis para hash de senhas, emissão de eventos ou audit logging. Validações ficam em cada coluna: isEmail, len: [min, max], isAlpha, isUrl, mais uma função validate(value) custom que joga exceção em entrada inválida. Transações têm dois sabores: managed (commit automático no sucesso, rollback automático se você der throw) e unmanaged (você chama t.commit() / t.rollback() manualmente).
v6 vs v7, NestJS, comparações
- Sequelize v7 (2024) entregou um rewrite TypeScript-first com decorators melhorados e tipagens mais estritas, enquanto a v6 segue muito usada em apps legados.
- Integração com NestJS:
@nestjs/sequelizeoferece injeção de models por módulo, análoga ao@nestjs/typeorm. - vs TypeORM: Sequelize usa classes ES6 e
sequelize.define; TypeORM usa decorators. A API do Sequelize é mais antiga e verbosa, mas estável. - vs Prisma: Sequelize é imperativo (modelos definidos em código); Prisma é declarativo (um schema
.prismagera um client tipado). Prisma vence em DX e type safety; Sequelize vence em variedade de dialetos e flexibilidade bruta. - Queries raw: quando o ORM atrapalha, caia para
sequelize.query('SELECT ...', { type: QueryTypes.SELECT }). - Pool de conexões: já vem embutido — configure com
pool: { max, min, idle }no construtor do Sequelize.
FAQ
Sequelize é melhor que Prisma? Nenhum é universalmente melhor. Prisma tem DX mais afiada e inferência de tipos completa; Sequelize tem suporte a mais dialetos (Snowflake, DB2) e ecossistema maduro de plugins. Para greenfield TypeScript, Prisma; para SQL legado ou poliglota, Sequelize.
Posso rodar SQL bruto? Sim — sequelize.query() aceita qualquer string SQL e retorna os resultados no formato que você especificar. Útil para window functions, CTEs ou sintaxes específicas do vendor que o ORM não modela.
Transações managed dão rollback ao throw? Sim. Envolva o trabalho em await sequelize.transaction(async (t) => { ... }) e qualquer exceção dentro do callback dispara rollback automático.
O que é o modo paranoid? Definir paranoid: true no model adiciona uma coluna deletedAt e faz destroy() virar soft delete; queries filtram os registros removidos por padrão, e paranoid: false em uma query específica os traz de volta.
Ferramentas Relacionadas
Gerador de Manuscrito
Converte texto digitado em uma imagem com aparência de letra manuscrita. Útil para tornar trabalhos digitais mais pessoais.
Gerador de Currículo
Preenche um currículo simples (CV) imprimível em A4 a partir de formulário com dados pessoais, formação e experiência.
Gerador de Favicon
Gera favicon a partir de texto/emoji em todos os tamanhos comuns (16, 32, 48, 64, 192, 512). Download como PNG.