sql >> Base de Datos >  >> RDS >> PostgreSQL

Sequelize no crea claves foráneas como restricciones

Primero, no es raro que los ORM manejen este tipo de cosas internamente en lugar de usar restricciones de clave externa en la base de datos.

En segundo lugar, no es raro que los ORM requieran un par de declaraciones de asociación para desencadenar todo el manejo interno que podría esperar.

var Task = this.sequelize.define('Task', { title: Sequelize.STRING })
  , User = this.sequelize.define('User', { username: Sequelize.STRING })

User.hasMany(Task)
Task.belongsTo(User)

Finalmente, Sequelize realmente escribirá declaraciones de clave externa en la base de datos, pero solo si también declara algún tipo de acción (o inacción) con onUpdate o onDelete .

User.hasMany(Task, { onDelete: 'SET NULL', onUpdate: 'CASCADE' })

CREATE TABLE IF NOT EXISTS `Task` (
  `id` INTEGER PRIMARY KEY, 
  `title` VARCHAR(255), 
  `user_id` INTEGER REFERENCES `User` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
);

Fuente de ejemplo de código