PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Sequelize erstellt keine Fremdschlüssel als Einschränkungen

Erstens ist es nicht ungewöhnlich, dass ORMs solche Dinge intern behandeln, anstatt Fremdschlüsselbeschränkungen in der Datenbank zu verwenden.

Zweitens ist es nicht ungewöhnlich, dass ORMs ein Paar erfordern von Assoziationsanweisungen, um die gesamte interne Verarbeitung auszulösen, die Sie erwarten könnten.

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

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

Schließlich schreibt Sequelize tatsächlich Fremdschlüsseldeklarationen in die Datenbank, aber nur, wenn Sie auch eine Art Aktion (oder Inaktivität) mit onUpdate deklarieren oder 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
);

Codebeispielquelle