PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sequelize hasMany, ThuộcTo, hay cả hai?

Sử dụng belongsTo xác định quyền sở hữu của các mô hình được liên kết. Để giải thích điều này chi tiết hơn, tôi sẽ tham khảo ví dụ được trích dẫn từ các hướng dẫn

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

Giả sử rằng bạn không còn quan tâm đến các nhiệm vụ của một dự án đã bị xóa. Trong trường hợp đó, bạn sẽ phải xóa các tác vụ theo cách thủ công, nếu bạn chưa xác định belongsTo sự kết hợp. belongsTo thiết lập quyền sở hữu của các dự án đối với các nhiệm vụ của nó và cơ sở dữ liệu cũng sẽ tự động xóa các tác vụ thuộc về dự án đã bị xóa. Đây được gọi là cascading delete và có thể xâu chuỗi trên nhiều bảng.

Nếu bạn chạy đoạn mã sau

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

trong một tập lệnh có kích thước tiếp theo và xem kết quả đầu ra

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

bạn sẽ nhận thấy hành vi xếp tầng đang được thiết lập khi tạo bảng nhiệm vụ.

Đã nói rất nhiều, câu trả lời cuối cùng là:tùy. Việc sử dụng belongsTo có thể rất hữu ích hoặc sẽ rất nguy hiểm nếu bạn muốn giữ lại các nhiệm vụ của dự án đã xóa. Chỉ sử dụng belongsTo nếu nó có ý nghĩa trong bối cảnh ứng dụng của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql join_collapse_limit và thời gian lập kế hoạch truy vấn

  2. loại bỏ các giá trị mảng trùng lặp trong postgres

  3. vấn đề về loại dữ liệu nối tiếp pg_dump

  4. Postgres KHÔNG VÀO hiệu suất

  5. docker postgres với dữ liệu ban đầu không được duy trì qua các lần cam kết