Avancé – Les contraintes dans Generic System

Dans les bases de données relationnelles, de nombreuses contraintes existent : clé primaire, clé étrangère, non null…
Dans Generic System, il existe aussi des contraintes. C’est ce à quoi nous allons nous intéresser maintenant.

Les contraintes

Toutes les contraintes sont vérifiées lors du flush() du cache, mais certaines sont aussi vérifiées immédiatement (lors de l’ajout ou de la suppression d’un type, d’une instance, etc.).
Commençons par un tour d’horizon des différentes contraintes. Mais juste avant cela, vous devez savoir une chose : certaines contraintes sont paramétrables par l’utilisateur, d’autres par le système lui-même. Les contraintes utilisateur sont des contraintes que vous pouvez choisir de poser, alors que les contraintes système ne peuvent pas être désactivées.

Voici donc la liste de ces contraintes utilisateur :

  • PropertyConstraint : cette contrainte s’applique à un attribut. Dès lors, un attribut ne peut avoir qu’une seule valeur ;
  • SingularConstraint : cette contrainte s’applique à une relation. Dès lors, l’instance à la position indiquée de la relation ne pourra être liée à une autre instance qu’une seule fois ;
  • InstanceValueClassConstraint : cette contrainte s’applique à un type, un attribut ou une relation. Elle contraint respectivement la classe de la valeur de l’instance, du holder ou du link issu du type, de l’attribut ou de la relation contraint(e) ;
  • RequiredConstraint : cette contrainte s’applique à un attribut ou une relation. Elle contraint l’attribut à avoir obligatoirement un holder ou la relation à avoir obligatoirement un link ;
  • UniqueValueConstraint : cette contrainte s’applique également à un attribut ou une relation. C’est la contrainte d’unicité des bases de données classiques.

Il existe de nombreuses contraintes système, comme vérifier que l’utilisateur n’utilise pas de type ou d’instance qui a été supprimé. Néanmoins, ces vérifications sont faites de façon totalement transparente.

Vous pouvez croire, au premier abord, que cela fait beaucoup de contraintes. Mais c”est aussi une façon de paramétrer très précisément Generic System selon vos besoins !

En résumé

  • Generic System permet de contraindre finement son système d’informations.
  • Toutes les contraintes sont vérifiées lors du flush du cache, mais certaines sont en plus vérifiées immédiatement (lors de l’ajout ou de la suppression d’un type, d’une instance…).
  • Il existe deux types de contraintes : les contraintes utilisateur, que vous pouvez choisir de poser et les contraintes système qui ne peuvent être désactivées.

Le prochain billet traite des suppressions dans Generic System.