Base de données : domaines
À quoi sert un domaine ?
- Une abstraction de haut niveau permattant de maintenir une base de code clair.
- Définir des contraintes métiers ou technologiques.
Passons a la pratique avec PG13 avec un exercice:
Je veux vérifier que mon nombre est compris entre 1 et 10 inclus.
DROP DOMAIN IF EXISTS d_number_between_1_10;
CREATE DOMAIN d_number_between_1_10 AS INTEGER
CHECK (
VALUE >= 1 AND VALUE <= 10
);Le domaine est crée. Je peux vérifier son existence en requetant le catalogue:
\dD d_number_between_1_10
List of domains
Schema | Name | Type | Collation | Nullable | Default | Check
--------+-----------------------+---------+-----------+----------+---------+------------------------------------
public | d_number_between_1_10 | integer | | | | CHECK (VALUE >= 1 AND VALUE <= 10)Passons a la création de la table. À partir de maintenant le domaine peut être utilisé pour la définition d’une table, fonction ou vue.
CREATE TABLE T_FOOBAR (
ID SERIAL NOT NULL,
my_number d_number_between_1_10,
PRIMARY KEY (ID)
);
-- FONCTIONNE
INSERT INTO T_FOOBAR (my_number) VALUES (1), (2), (9), (10);
-- ERREUR : violation de la contrainte
INSERT INTO T_FOOBAR (my_number) VALUES (11);Note: un domaine peut réferencer un autre domaine et donc construire des abstractions puissante et évolutives:
- Un domaine technologie: vérifier les entrées saisies par les utilisateurs.
- Un domaine métier: se base sur le domaine technologie et ajoute une logique métier.