Check constraints en domains

Een vertaling van “constraint” is beperking, je kunt in PostgreSQL beperkingen leggen op bijvoorbeeld kolommen in je tabel. In zo’n check kun je vastleggen aan welk formaat dit gegeven moet voldoen.

Als voorbeeld: We hebben de kolom emailadres in de tabel klant, deze zou aan een bepaald formaat moeten voldoen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
ALTER TABLE klant ADD CONSTRAINT validmail CHECK
(
  (emailadres)::text ~ '^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,}$'::text
);


De check op zich is een gewone reguliere expressie, want ja, ook die mag je gebruiken. De constraint wordt toegevoegd op de kolom “emailadres”. Data die nu in die kolom wordt gezet zal worden geweigerd als deze niet voldoet aan het formaat. Hiermee bewaak je dus consistentie, als er al foute data in je database staat zul je die eerst moeten oplossen, de constraint kan dan niet worden gemaakt.

Nog mooier: Domains

Zojuist heb je gezien hoe je eenvoudig een constraint kunt leggen op een bepaalde kolom. Het is echter mogelijk om je eigen datatypen aan te maken in PostgreSQL, één van die mogelijkheden kan met een “domain”.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
CREATE DOMAIN emailadres AS VARCHAR
CHECK(VALUE ~ '^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,}$'::text);


Je hebt nu een domain-datatype aangemaakt, gefeliciteerd :)
Maar wat kan je hier nu mee? Je kunt dit datatype gaan gebruiken bij het aanmaken van kolommen aan tabellen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE klant ADD COLUMN nog_een_adres emailadres


Je hebt nu dus een kolom van het type “emailadres” welke automatisch wordt gechecked op het juiste formaat! Ook hier geldt dat een domein over de hele database kan worden gebruikt en slechts 1 keer hoeft worden aangemaakt.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Voorbeeld-case
  3. Overerving in PostgreSQL
  4. Aanmaken van tabellen en het leggen van relaties
  5. Views
  6. PL/pgSQL functies en procedures
  7. Triggers
  8. Check constraints en domains
  9. Conclusie

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.