[PostgreSQL] Constraints tussen twee tabellen

Pagina: 1
Acties:

  • Sn0rkel
  • Registratie: Februari 2003
  • Laatst online: 06-05 19:50
Hoi, ik zit met het volgende: ik heb een tabel met samples (id, type, desc, creationDate) en een tabel met metingen (op samples) (id, desc, result, date, sid). Nu weet ik dat het in postgreSQL makkelijk is om de constraint op te leggen dat meting.sid een foreign key is naar sample.id, maar hoe krijg ik het voor elkaar om aan te geven dat meting.date > sample.creationDate moet zijn?

Zoeken naar iets als "postgresql constraints between tables" levert me enkel basale constraints uitleg op voor constraints tussen velden IN 1 Table.

Iemand?

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 09-05 12:41
Dat kan niet met een foreign key. dat zou je op moeten lossen met een stored procedure o.i.d. in de database of deze controle afhandelen in de software.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Je kunt hiervoor triggers gebruiken.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

't Kan ook met een function en een check-constraint:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table ctarget (id integer primary key, test integer);
create function gettest(integer) returns integer as 
          'select test from ctarget where id = $1' language sql;
create table ctest (idtest integer primary key references ctarget(id),
          ctest integer check (ctest > gettest(idtest) ));

acm=# insert into ctarget values (1, 2);
INSERT 5431505 1
acm=# insert into ctarget values (2, 3);
INSERT 5431506 1
acm=# insert into ctest values (1, 2);
ERROR:  new row for relation "ctest" violates check constraint "ctest_check"
acm=# insert into ctest values (1, 3);
INSERT 5431516 1
acm=# update ctest set ctest = 2 where idtest = 1;
ERROR:  new row for relation "ctest" violates check constraint "ctest_check"