PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres FK nawiązujący do kompozytu PK

Przy obecnej strukturze nie możesz.

Cel odwołania do klucza obcego musi być zadeklarowany jako PRIMARY KEY lub UNIQUE. Więc albo to

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

lub to

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

działałby jako cel dla bar.foo_id. Wtedy pasek miałby proste odniesienie.

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

Jeśli chcesz odwołać się do klucza podstawowego, który pierwotnie zadeklarowałeś w foo, musisz przechowywać ten klucz podstawowy w bar. Musisz przechowywać wszystko, a nie część. Więc bez modyfikowania foo, możesz zbudować taki pasek.

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. PostgreSQL:sprawne uzyskiwanie rangi porządkowej (indeks wiersza? )

  2. Czy powinienem mieć swój katalog Postgres tuż obok folderu mojego projektu? Jeśli tak to jak?

  3. Pobierz ostatni dzień miesiąca w PostgreSQL

  4. Hibernate 3.3.2GA nieprawidłowo ładuje dane bajtowe z PostgreSQL 9.0 i wszystkie mapowania typów są poprawne

  5. nie można utworzyć postgresa użytkownika:rola postgres nie istnieje