sql >> Database >  >> RDS >> PostgreSQL

Sequelize hasMany, behoortTo, of beide?

belongsTo gebruiken definieert het eigendom van de bijbehorende modellen. Om dit in meer detail uit te leggen, verwijs ik naar het voorbeeld uit de tutorials

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

Stel dat u niet langer geïnteresseerd bent in de taken van een verwijderd project. In dat geval zou u de taken handmatig moeten verwijderen, als u de belongsTo . niet had gedefinieerd vereniging. belongsTo vestigt een eigendom van projecten over zijn taken en de database zal automatisch ook de taken verwijderen die bij het verwijderde project horen. Dit heet cascading delete en kan over meerdere tabellen worden geketend.

Als u het volgende codefragment uitvoert

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

in een vervolgscript en bekijk de uitvoer

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

u zult merken dat het trapsgewijze gedrag wordt ingesteld bij het maken van de takentabel.

Zoveel gezegd, het uiteindelijke antwoord is:het hangt ervan af. Het gebruik van belongsTo kan erg handig zijn of fataal zijn als u liever de taken van het verwijderde project wilt behouden. Gebruik alleen belongsTo als het zinvol is in de context van uw aanvraag.




  1. Shell-script om pgsql-commando's in bestanden uit te voeren

  2. Kan projectmetadata niet ophalen. Zorg ervoor dat het een op MSBuild gebaseerd .NET Core-project is

  3. Top 5 tools voor gegevensmodellering voor SQL Server

  4. Fout bij het maken van een PostgreSQL-database met python, sqlalchemy en psycopg2