sql >> Databasteknik >  >> RDS >> PostgreSQL

Uppföljaren har många, tillhör eller båda?

Använda belongsTo definierar ägandet av de tillhörande modellerna. För att förklara detta mer i detalj kommer jag att hänvisa till exemplet som citeras från handledningarna

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

Antag att du inte längre är intresserad av uppgifterna i ett borttaget projekt. I så fall skulle du behöva ta bort uppgifterna manuellt om du inte hade definierat belongsTo förening. belongsTo etablerar ett ägande av projekt över sina uppgifter och databasen kommer även automatiskt att ta bort uppgifterna som hör till det borttagna projektet. Detta kallas cascading delete och kan kedja över flera bord.

Om du kör följande kodavsnitt

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

i ett uppföljningsmanus och titta på resultatet

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

du kommer att märka det överlappande beteendet som ställs in i skapandet av uppgiftstabellen.

Så mycket sagt, det slutliga svaret är:det beror på. Användningen av belongsTo kan vara väldigt praktiskt eller vara ödesdigert om du hellre vill behålla uppgifterna i det raderade projektet. Använd endast belongsTo om det är vettigt i samband med din ansökan.




  1. SQL-gruppering på tidsintervall

  2. Postgres db design Normalisera tabeller eller använd matriskolumner

  3. Mysql, Kontrollera fältvärdesändring?

  4. SQL-gruppfunktion kapslade för djupt