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)
1
2
3
4
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
);
(
(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)
1
2
2
CREATE DOMAIN emailadres AS VARCHAR
CHECK(VALUE ~ '^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,}$'::text);
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:
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.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- Voorbeeld-case
- Overerving in PostgreSQL
- Aanmaken van tabellen en het leggen van relaties
- Views
- PL/pgSQL functies en procedures
- Triggers
- Check constraints en domains
- Conclusie