tutorial sequelize que mayor literal espaƱol datatypes node.js database-migration sequelize.js

node.js - mayor - Escribiendo Migraciones con Claves Extranjeras Usando SequelizeJS



sequelize mayor que (2)

¿Cómo puedo crear tablas con relaciones de clave externa entre sí a través de la Interfaz de consulta de Sequelize?

El método .createTable() un diccionario de columnas. Puede ver la lista de atributos válidos en la documentación de .define() , específicamente mirando las filas [attributes.column.*] Dentro de la tabla params.

Para crear un atributo con una relación de clave externa, use los campos "referencias" y "referenciasClave":

Por ejemplo, lo siguiente crearía una tabla de users y una tabla de user_emails que hace referencia a la tabla de usuarios.

queryInterface.createTable(''users'', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true } }).then(function() { queryInterface.createTable(''user_emails'', { userId: { type: Sequelize.INTEGER, references: { model: ''users'', key: ''id'' } } }) });

¿Qué columnas y tablas de ayuda se requieren para la secuela? Por ejemplo, parece que se esperan columnas específicas como createdAt o updatedAt.

Parece que un modelo estándar esperará una columna id , updatedAt y createdAt para cada tabla.

queryInterface.createTable(''users'', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, createdAt: { type: Sequelize.DATE }, updatedAt: { type: Sequelize.DATE } }

Si establece paranoid en true en su modelo, también necesita una deletedAt tiempo deletedAt .

El fondo

Estoy construyendo un proyecto con SequelizeJS , un ORM popular para NodeJS. Al diseñar un esquema, parece haber dos tácticas:

  1. Cree un código de modelo y use la función .sync () para generar automáticamente tablas para sus modelos.
  2. Cree un código de modelo y escriba migraciones manuales utilizando QueryInterface y umzug .

Mi entendimiento es que el # 1 es mejor para la creación rápida de prototipos, pero que el # 2 es una mejor práctica para los proyectos que se espera que evolucionen con el tiempo y donde los datos de producción necesitan poder sobrevivir a las migraciones.

Esta pregunta pertenece a la táctica # 2.

Las preguntas)

Mis tablas tienen relaciones que deben reflejarse a través de claves externas.

  • ¿Cómo puedo crear tablas con relaciones de clave externa entre sí a través de la Interfaz de consulta de Sequelize?

  • ¿Qué columnas y tablas auxiliares son requeridas por Sequelize? Por ejemplo, parece que se esperan columnas específicas como createdAt o updatedAt.


Quiero ofrecer otra alternativa más manual porque al usar migraciones manuales y queryInterface me encontré con el siguiente problema: tenía 2 archivos en la carpeta de migración, por lo que

migrations/create-project.js migrations/create-projectType.js

porque el project tenía la columna projectTypeId hacía referencia a projectType , que aún no se había creado debido al orden de los archivos y esto estaba causando un error.

Lo resolví agregando una restricción de clave externa después de crear ambas tablas. En mi caso, decidí escribirlo dentro de create-projectType.js :

queryInterface.createTable(''project_type'', { // table attributes ... }) .then(() => queryInterface.addConstraint(''project'', [''projectTypeId''], { type: ''FOREIGN KEY'', name: ''FK_projectType_project'', // useful if using queryInterface.removeConstraint references: { table: ''project_type'', field: ''id'', }, onDelete: ''no action'', onUpdate: ''no action'', }))