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

Postgres FK tham chiếu PK tổng hợp

Với cấu trúc hiện tại của bạn, bạn không thể.

Đích của một tham chiếu khóa ngoại phải được khai báo là CHÍNH hoặc DUY NHẤT. Vì vậy, một trong hai điều này

CREATE TABLE foo (
    id SERIAL PRIMARY KEY,
    foo_created_on ABSTIME,
    foo_deactivated_on ABSTIME,
    UNIQUE (id, foo_created_on)
);

hoặc cái này

CREATE TABLE foo (
    id SERIAL,
    foo_created_on ABSTIME,
    foo_deactivated_on ABSTIME,
    PRIMARY KEY (id, foo_created_on),
    UNIQUE (id)
);

sẽ hoạt động như một mục tiêu cho bar.foo_id. Sau đó, thanh sẽ có một tham chiếu đơn giản.

CREATE TABLE bar (
    id SERIAL,
    bar_created_on ABSTIME,
    bar_deactivated_on ABSTIME,
    foo_id REFERENCES foo (id),
    PRIMARY KEY (id, bar_created_on)
);

Nếu bạn muốn tham chiếu đến khóa chính mà bạn đã khai báo ban đầu trong foo, bạn phải lưu khóa chính đó trong thanh. Bạn phải lưu trữ tất cả, không phải một phần của nó. Vì vậy, không cần sửa đổi foo, bạn có thể tạo thanh như thế này.

CREATE TABLE bar (
    id SERIAL,
    bar_created_on ABSTIME,
    bar_deactivated_on ABSTIME,
    foo_id INTEGER NOT NULL,
    foo_created_on ABSTIME NOT NULL,
    FOREIGN KEY (foo_id, foo_created_on) REFERENCES foo (id, foo_created_on),
    PRIMARY KEY (id, bar_created_on)
);


  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ác chỉ mục JSON của postgres có đủ hiệu quả so với các bảng chuẩn hóa cổ điển không?

  2. Cách thay đổi mật khẩu người dùng trong PostgreSQL

  3. Cách triển khai PostgreSQL khả dụng cao với Điểm cuối duy nhất cho WordPress

  4. Truy vấn hiệu quả bảng chuỗi thời gian khổng lồ cho một hàng cứ sau 15 phút

  5. Làm thế nào để lưu trữ hàng triệu bản ghi thống kê một cách hiệu quả?