sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres FK hänvisar till komposit PK

Med din nuvarande struktur kan du inte.

Målet för en främmande nyckelreferens måste deklareras antingen PRIMÄRNYCKEL eller UNIK. Så antingen detta

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

eller det här

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

skulle fungera som ett mål för bar.foo_id. Då skulle bar ha en enkel referens.

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

Om du vill referera till den primärnyckel som du ursprungligen deklarerade i foo, måste du lagra den primärnyckeln i bar. Du måste lagra allt, inte en del av det. Så utan att modifiera foo kan du bygga bar så här.

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. Inloggningsskript körs inte - Bluehost

  2. php mysql fulltextsökning:lucene, sfinx eller?

  3. Formulär fungerar bara när du trycker på kryssrutan

  4. skapa tabeller och kolumner dynamiskt med mysql python-anslutningen