Có thể trong PostgreSQL có điều kiện thêm khoá ngoại không?Khoá ngoài có điều kiện PostgreSQL
Cái gì như: ALTER TABLE table1 ADD FOREIGN KEY (some_id) REFERENCES other_table WHERE some_id NOT IN (0,-1) AND some_id IS NOT NULL;
Cụ thể, bảng tham chiếu của tôi có tất cả các số nguyên dương (1+) nhưng bảng tôi cần phải thêm khóa ngoại để có thể chứa không (0), null và tiêu cực một (-1) thay vào đó, tất cả đều có ý nghĩa khác.
Ghi chú:
tôi hoàn toàn nhận thức được rằng đây là bảng thiết kế nghèo, nhưng đó là một thủ thuật thông minh xây dựng 10+ năm trước, khi các tính năng và các nguồn lực, chúng tôi đã có sẵn tại thời điểm này không tồn tại . Hệ thống này đang chạy hàng trăm cửa hàng bán lẻ để quay trở lại và thay đổi phương pháp tại thời điểm này có thể mất vài tháng mà chúng tôi không có.
Tôi không thể sử dụng trình kích hoạt, này PHẢI được thực hiện bằng khóa ngoài.
Genius! Bạn nói đúng rằng nó hơi xấu xí, nhưng cơ sở dữ liệu vẫn tự quản lý, vì vậy nó nên làm điều đó! – trex005
AH, bạn đã bao giờ làm việc trên nguồn postgres chưa? Đây có thể là một tính năng tuyệt vời mà bạn có thể thêm bằng cách thực hiện chính xác điều này đằng sau hậu trường. – trex005
@ trex005: Tôi chưa làm việc trên các nguồn PG. Nhưng leeching trên danh sách của hacker mỗi bây giờ và sau đó ấn tượng của tôi là, rằng một tính năng như vậy sẽ không được chào đón. Nếu bạn khái quát _your_ ví dụ (khớp với bất kỳ thứ gì nhưng '0' và' -1') và suy nghĩ về một cú pháp chung bao quát tất cả các trường hợp có thể bạn sẽ nhận được một cấu trúc cú pháp khá phức tạp. Ở phía bên kia của quy mô: Không có gì bạn không thể làm với các công cụ hiện có rồi. Kết quả thực: Các nguồn tài nguyên khan hiếm (thời gian/ngân sách của nhà phát triển) sẽ trả hết hơn cho các mặt hàng TODO khác. Nhưng đó chỉ là ấn tượng của tôi. Đã rơi tự do để liên lạc với họ. –