Usando belongsTo
define la propiedad de los modelos asociados. Para explicar esto con más detalle me referiré al ejemplo citado de los tutoriales
Project.hasMany(Task);
Task.belongsTo(Project);
Suponga que ya no está interesado en las tareas de un proyecto eliminado. En ese caso, tendría que eliminar las tareas manualmente, si no hubiera definido el belongsTo
asociación. belongsTo
establece la propiedad de los proyectos sobre sus tareas y la base de datos también eliminará automáticamente las tareas que pertenecen al proyecto eliminado. Esto se llama cascading delete
y puede encadenar varias tablas.
Si ejecuta el siguiente fragmento de código
const Project = sequelize.define('project', {
name: Sequelize.STRING
});
const Task = sequelize.define('task', {
name: Sequelize.STRING
});
Project.hasMany(Task);
Task.belongsTo(Project);
en una secuencia de comandos y ver la salida
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);
notará que el comportamiento en cascada se establece en la creación de la tabla de tareas.
Dicho tanto, la respuesta final es:depende. El uso de belongsTo
puede ser muy útil o puede ser fatal si prefiere mantener las tareas del proyecto eliminado. Solo usa belongsTo
si tiene sentido en el contexto de su aplicación.