[psql/alg] Constraints, kan dit ?

Pagina: 1
Acties:

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Hoi allemaal,

Bij voorbaat sorry voor de vage topic titel.. Ik kon echt niets beters bedenken in een paar woordjes.

Wat is er aan de hand ? Ik ben momenteel bezig met het opzetten van een database in Postgres en eigenlijk gaat dat heel goed. Natuurlijk is er een probleempje/vraag :

Gegeven de tabel (minimaal) :

Relatie:
ID (int4) (primary key)
Debiteurnummer (char(6))
Naam (varchar(40))
Geblokkeerd (boolean)
...


De output uit deze tabel moet straks de input gaan vormen voor een reeds bestaand systeem. Hierin is toegestaan dat meerdere relaties hetzelfde debiteurnummer hebben (vraag me niet waarom, het is er :( ).

Nu wil ik in deze tabel het volgende kunnen aangeven (bij INSERT/UPDATE):
Als het debiternummer reeds bestaat, dan mag je de relatie niet toevoegen, tenzij die andere relatie 'geblokkeerd' is.

Je mag een relatie niet deblokkeren (dus van true => false), als er daardoor dubbele debiteurnummers ontstaan.
Je kunt natuurlijk een UNIQUE INDEX zetten op debiteurnummer, maar dan ontbreekt nog steeds de check op andere relaties die evt. 'geblokkeerd' staan.

Ik heb al een aantal tutorials/how-to's over constraints doorgelezen, maar eerlijk gezegd kom ik daar niet verder mee. Kan iemand me een zetje geven ? (als dit uberhaupt mogelijk is)

SIZE does matter.
"You're go at throttle up!"


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Als je probeert om je constraints positief te verwoorden, dan kan je zo toepassen in de vorm van een query.
Dus mag een relatie toevoegen als:.....

Constraints zijn namelijk vaak boolean expressies die altijd TRUE moeten zijn voor een kolom,record, tabel of database.
Sommige constraints kan je direct op je tabel definiëren sommige moet je apart in een stored procedure afvangen die je bijvoorbeeld gebruikt om de insert/update te doen.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Dat snap ik wel aardig, maar hoe..

Ik vond bijvoorbeeld iets als
code:
1
2
3
4
CREATE TABLE countries (
    cod_country integer NOT NULL,
    name varchar(30))
   CONSTRAINT cod_raro CHECK ( cod_country > 0 AND cod_country < 154 );


Oftewel, check of de in te voegen code tussen de 0 en de 154 ligt. Echter dit is puur een check op het in te voegen record. Waar ik dus niet uitkom is hoe je checkt op de rest van de tabel. (Ik ben een voorbeelden-man, dus als ik een voorbeeld zie/lees kom ik er meestal wel uit met de rest van theorie)

SIZE does matter.
"You're go at throttle up!"


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

voor tabel en database constraints kom je eerder uit op een trigger die een stored procedure aantrappen. Kijk daar maar eens naar.

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Thanks.. dar ziet er een stuk beter uit.. Gewoon een triggertje bij INSERT/UPDATE die een relatie_check funktie aanroept.

SIZE does matter.
"You're go at throttle up!"