PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres FK, препращащ към съставен PK

С настоящата ви структура не можете.

Целта на препратката към външен ключ трябва да бъде декларирана като PRIMARY KEY или UNIQUE. Така че или това

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

или това

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

ще работи като цел за bar.foo_id. Тогава лентата ще има проста препратка.

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

Ако искате да препратите към първичния ключ, който първоначално сте декларирали във foo, трябва да съхраните този първичен ключ в bar. Трябва да съхранявате всичко, а не част от него. Така че без да модифицирате foo, можете да изградите лента като тази.

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. Бавно избиране на отделна заявка на postgres

  2. Комплексен проблем с „пропуски и острови“.

  3. postgresql вмъкване на нулева стойност при заявка

  4. Изчисляване на кумулативна дневна сума в PostgreSQL

  5. PostgreSQL:Архивиране и възстановяване на база данни?