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

Sådan laver du en fremmednøgle med en begrænsning på den refererede tabel i PostgreSQL

Du kan bruge en CHECK-begrænsning til dette. Du kan ikke sætte en forespørgsel i en CHECK-begrænsning, men du kan kalde en funktion; så vi bygger en simpel funktion, der fortæller os, om et pluginid er en matrix:

create or replace function is_matrix(int) returns boolean as $$
    select exists (
        select 1
        from plugins
        where id   = $1
          and type = 'matrix'
    );
$$ language sql;

og pak det ind i en CHECK-begrænsning:

alter table matrix_params add constraint chk_is_matrix check (is_matrix(pluginid));

Så:

=> insert into matrix_params values (1,1);
=> insert into matrix_params values (2,3);
ERROR:  new row for relation "matrix_params" violates check constraint "chk_is_matrix"

Og FK tager sig af referentiel integritet og kaskader.



  1. syntaksfejl for mysql-deklaration af variabel

  2. SQLite3 (eller generel SQL) henter n'te række af et forespørgselsresultat

  3. Kan jeg løse dette med ren mysql? (sammenføjning på '' adskilte værdier i en kolonne)

  4. Den bedste måde at få den første og sidste dag i sidste måned?