Po pierwsze, nierzadko zdarza się, że ORM-y obsługują tego rodzaju rzeczy wewnętrznie, zamiast używać ograniczeń kluczy obcych w bazie danych.
Po drugie, często zdarza się, że ORM wymagają pary oświadczeń powiązań, aby uruchomić całą wewnętrzną obsługę, jakiej można się spodziewać.
var Task = this.sequelize.define('Task', { title: Sequelize.STRING })
, User = this.sequelize.define('User', { username: Sequelize.STRING })
User.hasMany(Task)
Task.belongsTo(User)
Wreszcie, Sequelize zapisze deklaracje klucza obcego do bazy danych, ale tylko wtedy, gdy zadeklarujesz również jakąś akcję (lub brak akcji) za pomocą onUpdate
lub onDelete
.
User.hasMany(Task, { onDelete: 'SET NULL', onUpdate: 'CASCADE' })
CREATE TABLE IF NOT EXISTS `Task` (
`id` INTEGER PRIMARY KEY,
`title` VARCHAR(255),
`user_id` INTEGER REFERENCES `User` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
);