sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres FK, der refererer til komposit PK

Med din nuværende struktur kan du ikke.

Målet for en fremmednøglereference skal erklæres enten PRIMÆR NØGLE eller UNIK. Så enten dette

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

eller dette

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

ville fungere som et mål for bar.foo_id. Så ville bar have en simpel reference.

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

Hvis du vil referere til den primære nøgle, du oprindeligt erklærede i foo, skal du gemme den primære nøgle i bar. Du skal gemme det hele, ikke en del af det. Så uden at ændre foo, kunne du bygge bar som denne.

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. Udførelse af en joinforbindelse på tværs af flere heterogene databaser, f.eks. PostgreSQL og MySQL

  2. SQL-tal fra sammenføjet tabel

  3. konvertering af kommasepareret værdi til flere rækker

  4. CodeIgniter-databaseforespørgsel ved hjælp af query() med IN-klausul