sql >> Databáze >  >> RDS >> PostgreSQL

Postgres FK odkazující na kompozitní PK

S vaší aktuální strukturou nemůžete.

Cíl odkazu na cizí klíč musí být deklarován buď PRIMARY KEY nebo UNIQUE. Takže buď toto

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

nebo toto

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

bude fungovat jako cíl pro bar.foo_id. Pak by bar měl jednoduchý odkaz.

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

Pokud chcete odkazovat na primární klíč, který jste původně deklarovali ve foo, musíte tento primární klíč uložit do baru. Musíte ji uložit celou, ne její část. Takže bez úpravy foo můžete postavit bar jako tento.

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. Informační schéma a primární klíče

  2. Ukládat MySQL do textových souborů CSV s názvy sloupců nahoře?

  3. Chcete-li obejít ORA-29278, dejte přihlašovací údaje na UTL_MAIL.SEND

  4. Vložení více než 1000 řádků z Excelu do SQLServeru