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

Sequelize hat viele, gehört zu oder beides?

Verwenden von belongsTo definiert das Eigentum an den zugehörigen Modellen. Um dies näher zu erläutern, verweise ich auf das aus den Tutorials zitierte Beispiel

Project.hasMany(Task);
Task.belongsTo(Project);

Gehen Sie davon aus, dass Sie an den Aufgaben eines gelöschten Projekts nicht mehr interessiert sind. In diesem Fall müssten Sie die Aufgaben manuell löschen, wenn Sie belongsTo nicht definiert hätten Verband. belongsTo erstellt ein Eigentum an Projekten über seine Aufgaben und die Datenbank löscht automatisch auch die Aufgaben, die zu dem gelöschten Projekt gehören. Dies wird als cascading delete bezeichnet und kann über mehrere Tabellen verketten.

Wenn Sie das folgende Code-Snippet ausführen

const Project = sequelize.define('project', {
    name: Sequelize.STRING
});
const Task =  sequelize.define('task', {
    name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);

in einem Folgeskript und sehen Sie sich die Ausgabe an

Executing (default): DROP TABLE IF EXISTS `projects`;
Executing (default): CREATE TABLE IF NOT EXISTS `projects` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL);
Executing (default): PRAGMA INDEX_LIST(`projects`)
Executing (default): DROP TABLE IF EXISTS `tasks`;
Executing (default): CREATE TABLE IF NOT EXISTS `tasks` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, `projectId` INTEGER REFERENCES `projects` (`id`) ON DELETE SET NULL ON UPDATE CASCADE);

Sie werden feststellen, dass das Kaskadierungsverhalten bei der Erstellung der Aufgabentabelle festgelegt wird.

So viel gesagt, die letzte Antwort lautet:Es kommt darauf an. Die Verwendung von belongsTo kann sehr praktisch sein oder fatal sein, wenn Sie lieber die Aufgaben des gelöschten Projekts behalten möchten. Verwenden Sie nur belongsTo wenn es im Kontext Ihrer Anwendung sinnvoll ist.