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

Sequelize hasMany, appartiene a o entrambi?

Usando belongsTo definisce la proprietà dei modelli associati. Per spiegarlo più in dettaglio farò riferimento all'esempio citato dai tutorial

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

Supponi di non essere più interessato alle attività di un progetto eliminato. In tal caso dovresti eliminare le attività manualmente, se non avessi definito il belongsTo associazione. belongsTo stabilisce una proprietà dei progetti sulle sue attività e il database eliminerà automaticamente anche le attività appartenenti al progetto eliminato. Questo è chiamato cascading delete e può concatenare più tabelle.

Se esegui il seguente frammento di codice

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

in uno script di sequele e guarda l'output

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);

noterai il comportamento a cascata impostato nella creazione della tabella delle attività.

Tanto detto, la risposta finale è:dipende. L'uso di belongsTo può tornare molto utile o sarà fatale se preferisci mantenere le attività del progetto eliminato. Usa solo belongsTo se ha senso nel contesto della tua applicazione.