sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man gör en främmande nyckel med en begränsning på den refererade tabellen i PostgreSQL

Du kan använda en CHECK-begränsning för detta. Du kan inte lägga en fråga i en CHECK-begränsning men du kan anropa en funktion; så vi bygger en enkel funktion som talar om för oss om ett pluginid är en matris:

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

och slå in det i en CHECK-begränsning:

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

Sedan:

=> 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"

Och FK tar hand om referensintegritet och kaskader.



  1. Revision i Oracle

  2. Radnummer per grupp i mysql

  3. Jämför Percona XtraBackup med MySQL Enterprise Backup:Del ett

  4. Hur man använder python mysqldb för att infoga många rader samtidigt