Los modelos son la esencia de Sequelize, estos son una abstracción que representa una tabla dentro de la base de datos a la que nos estamos conectando. Un modelo se encarga de indicarle a Sequelize el nombre de la tabla, las diferentes columnas que tiene esta, así como los tipos de datos que guarda cada una y sus restricciones correspondientes.

El nombre del modelo no tiene que ser estrictamente igual al de la tabla en la base de datos.

Para definir un modelo dentro de Sequelize tenemos dos opciones, ya sea usar el método define de la clase Sequelize o usar clases que extiendan de Model.

sequelize.define internamente llama a **Model**, así qué ambas formas son casi lo mismo.

Ambas formas requieren de algo muy importante, tener un schema o modelo que defina la estructura interna de la tabla, así como los tipos de datos de cada columna; para definir los tipos de datos de cada columna usamos los DataTypes que nos provee Sequelize.

**const { DataTypes } = require("sequelize");

const Schema = {
	id: {
		allowNull: false,
		unique: true, 
		type: DataTypes.integer,
	},
	birthDate: {
		field: "birth_date",
		allowNull: false, 
		type: DataTypes.date
	}
};**

Con lo anterior definimos la estructura de una tabla que va a tener dos columnas, id que es de tipo entero, además de ser único y birth_date que es una fecha que no puede ser nula.

Si no se provee un campo field, entonces la columna tomará el nombre de la key/propiedad.

Después de tener nuestro schema listo ya podemos decidir cuál forma usar para crear el modelo.

Extendiendo de Model

**const { Model, Sequelize } = require("sequelize");

const sequelize = new Sequelize("your URI string connection", {...config});
//creamos la instancia de Sequelize.

class User extends Model {};

User.init({...yourSchema}, {
	modelName: "model_name",
	tableName: "table_name",
	sequelize,
	timestamps: false,
});

// sequelize.sync();**

Lo primero que hacemos es crear una instancia de Sequelize, es la base de todo lo que vamos a hacer, luego definimos la clase que va a servir de molde para nuestro modelo y después iniciamos dicho modelo con el método init (este se hereda directamente de Model) y le debemos pasar dos parámetros:

  1. schema → la estructura de columnas y tipos de datos que va a tener dicha tabla.
  2. config options → es un objeto que define la configuración de dicho modelo, las opciones de configuración más comunes son:

Y por último usamos sequelize.sync() para sincronizar todos los modelos que se hayan inicializado.

Usando Sequelize.define

**const { Sequelize } = require("sequelize");

const sequelize = new Sequelize("your URI string connection", {...config});
//creamos la instancia de Sequelize. 

const setUpModels = (sequelize) => {
	sequelize.define(
		"model_name", 
		{...yourSchema}, 
		{ tableName: "table_name", timestamps: false }
	);
//	sequelize.sync();
}

setUpModels(sequelize);**

Lo primero que hacemos es crear una instancia de Sequelize, es la base de todo lo que vamos a hacer, luego creamos una función que nos ayuda a definir todos los diferentes modelos que vayamos a tener, esta recibe la instancia de Sequelize como parámetro y utiliza el método define de dicha instancia; define recibe 3 parámetros:

  1. modelName → el nombre que queremos asignarle a dicho modelo.
  2. schema → la estructura de columnas y tipos de datos que va a tener dicha tabla.
  3. config options → es un objeto que define la configuración de dicho modelo, las opciones de configuración más comunes son:

Lo último que hace la función es llamar a sequelize.sync() para así sincronizar todos los diferentes modelos que hayamos definido o inicializado.

Después de que hayamos sincronizado nuestros modelos, podemos encontrarlos dentro de el objeto models que se encuentra en la instancia de Sequelize.