PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Sequelize non crea chiavi esterne come vincoli

Innanzitutto, non è raro che gli ORM gestiscano questo genere di cose internamente anziché utilizzare i vincoli di chiave esterna nel database.

In secondo luogo, non è raro che gli ORM richiedano una coppia delle dichiarazioni di associazione per attivare tutta la gestione interna che potresti aspettarti.

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

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

Infine, Sequelize scriverà effettivamente le dichiarazioni di chiave esterna nel database, ma solo se dichiari anche un qualche tipo di azione (o inazione) 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
);

Fonte di esempio di codice