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

Efterfølgeren har mange, tilhører eller begge?

Brug af belongsTo definerer ejerskabet af de tilknyttede modeller. For at forklare dette mere detaljeret vil jeg henvise til eksemplet citeret fra selvstudierne

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

Antag, at du ikke længere er interesseret i opgaverne i et slettet projekt. I så fald ville du skulle slette opgaverne manuelt, hvis du ikke havde defineret belongsTo forening. belongsTo etablerer et ejerskab af projekter over sine opgaver, og databasen vil automatisk også slette de opgaver, der hører til det slettede projekt. Dette kaldes cascading delete og kan kæde over flere borde.

Hvis du kører følgende kodestykke

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

i et efterfølgerscript og se outputtet

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 vil bemærke, at den overlappende adfærd bliver sat i oprettelsen af ​​opgavetabellen.

Så meget sagt, det endelige svar er:det afhænger. Brugen af ​​belongsTo kan være meget praktisk eller vil være fatalt, hvis du hellere vil beholde opgaverne i det slettede projekt. Brug kun belongsTo hvis det giver mening i forbindelse med din ansøgning.




  1. Postgres-operatører til JSON-datatype ved hjælp af Rails 4

  2. Sæt $$ i dollar-citeret streng i PostgreSQL

  3. Sådan beregnes forskel mellem to datoer i måneder i MySQL

  4. Sådan ændres Limit dynamisk i mySQL