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

Các khóa ngoại giới thiệu các khóa ngoại khác trong PostgreSQL

Ràng buộc khóa ngoại không quan tâm liệu (các) cột được tham chiếu có đang tham chiếu đến chính cột khác hay không. Nhưng (các) cột được tham chiếu phải là duy nhất. Đó là những gì thông báo lỗi cho bạn biết (khá rõ ràng).

Điều bạn đang thiếu là khóa ngoại ràng buộc có thể dựa trên nhiều cột . Điều này sẽ hoạt động:

FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission

Thay thế:

FOREIGN KEY (num) REFERENCES submission(num),
FOREIGN KEY (user_id) REFERENCES submission(user_id),
FOREIGN KEY (assignment_id) REFERENCES submission(assignment_id)

Dạng ngắn gọn của cú pháp (gửi REFERENCES submission ) là có thể, vì bạn đang tham chiếu đến khóa chính, là khóa mặc định.

Ngoài ra, bạn có thể đơn giản hóa:make submission.num khóa chính sinlge-column, thả các cột thừa user_idassignment_id từ correction và giảm ràng buộc fk xuống chỉ (num) - như đã thảo luận trong câu trả lời của @ Tim .

Miễn là bạn có ràng buộc fk nhiều cột, hãy xem xét NOT NULL ràng buộc trên mỗi cột tham chiếu (như nhận xét của @joop). Ngoài ra, một hoặc nhiều giá trị NULL trong các cột tham chiếu cho phép thoát khỏi ràng buộc fk với MATCH SIMPLE mặc định hành vi. Điều này có thể được dự định hoặc không, thường là không .
Ngoài ra, hãy xem xét MATCH FULL đối với ràng buộc fk nhiều cột chỉ cho phép điều đó nếu tất cả các cột tham chiếu là NULL. Chi tiết:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cài đặt thoát chuỗi PostgreSQL

  2. Các phương pháp hay nhất về bảo mật PostgreSQL

  3. kubernetes timescaledb statefulset:Các thay đổi bị mất khi giải trí pod

  4. Làm thế nào để ánh xạ thuộc tính số nguyên của một mô hình thành một chuỗi?

  5. phiên bản pg_dump không khớp trong Rails