PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres FK referensi komposit PK

Dengan struktur Anda saat ini, Anda tidak bisa.

Target referensi kunci asing harus dideklarasikan sebagai KUNCI UTAMA atau UNIK. Jadi begini

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

atau ini

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

akan berfungsi sebagai target untuk bar.foo_id. Maka bar akan memiliki referensi sederhana.

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

Jika Anda ingin mereferensikan kunci utama yang semula Anda nyatakan di foo, Anda harus menyimpan kunci utama itu di bilah. Anda harus menyimpan semuanya, bukan sebagian. Jadi tanpa memodifikasi foo, Anda dapat membuat bilah seperti ini.

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. Bisakah Sqlalchemy bekerja dengan baik dengan beberapa file database SQLite terlampir?

  2. Perbarui beberapa kolom yang dimulai dengan string tertentu

  3. Postgres 9.4:Sertakan kolom saudara di setiap hasil larik jsonb

  4. Heroku pg:tarik gagal mengisi skema

  5. Indeks GIN PostgreSQL pada array uuid