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.