Đầu tiên, không có gì lạ khi các ORM xử lý loại việc này trong nội bộ thay vì sử dụng các ràng buộc khóa ngoại trong cơ sở dữ liệu.
Thứ hai, không có gì lạ khi các ORM yêu cầu cặp trong số các câu lệnh liên kết để kích hoạt tất cả các xử lý nội bộ mà bạn có thể mong đợi.
var Task = this.sequelize.define('Task', { title: Sequelize.STRING })
, User = this.sequelize.define('User', { username: Sequelize.STRING })
User.hasMany(Task)
Task.belongsTo(User)
Cuối cùng, Sequelize sẽ thực sự ghi khai báo khóa ngoại vào cơ sở dữ liệu, nhưng chỉ khi bạn cũng khai báo một số loại hành động (hoặc không hành động) với onUpdate
hoặc 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
);