Une contrainte d'intégrité est une clause permettant de contraindre
la modification de tables, faite par l'intermédiaire de requêtes
d'utilisateurs, afin que les données saisies dans la base soient conformes
aux données attendues. Ces contraintes doivent être exprimées
dès la création de la table grâce aux mots clés suivants:
- CONSTRAINT
- DEFAULT
- NOT NULL
- UNIQUE
- CHECK
Le langage SQL permet de définir une valeur par défaut lorsqu'un
champ de la base n'est pas renseigné grâce à la clause
DEFAULT. Cela permet notamment de faciliter
la création de tables, ainsi que de garantir qu'un champ ne sera pas vide.
La clause DEFAULT doit être suivie par la valeur à affecter.
Cette valeur peut être un des types suivants:
- constante numérique
- constante alphanumérique (chaîne de caractères)
- le mot clé USER (nom de l'utilisateur)
- le mot clé NULL
- le mot clé CURRENT_DATE (date de saisie)
- le mot clé CURRENT_TIME (heure de saisie)
- le mot clé CURRENT_TIMESTAMP (date et heure de saisie)
Le mot clé NOT NULL permet de spécifier qu'un champ doit être
saisi, c'est-à-dire que le SGBD refusera d'insérer des tuples dont un champ
comportant la clause NOT NULL n'est pas renseigné.
Il est possible de faire un test sur un champ grâce à la clause CHECK()
comportant une condition logique portant sur une valeur entre les parenthèses. Si la
valeur saisie est différente de NULL, le SGBD va effectuer un test grâce
à la condition logique. Celui-ci peut évenutellement être une condition
avec des ordres SELECT...
La clause UNIQUE permet de vérifier que la valeur saisie pour un champ
n'existe pas déjà dans la table. Cela permet de garantir que toutes les
valeurs d'une colonne d'une table seront différentes.
Il est possible de donner un nom à une contrainte grâce au mot clé
CONSTRAINT suivi du nom que l'on donne à la contrainte, de telle manière
à ce que le nom donné s'affiche en cas de non respect de l'intégrité,
c'est-à-dire lorsque la clause que l'on a spécifiée n'est pas
validée.
Si la clause CONSTRAINT n'est pas spécifiée, un nom sera donné
arbitrairement par le SGBD. Toutefois, le nom donné par le SGBD risque fortement de ne
pas être compréhensible, et ne sera vraisemblablement pas compris lorsqu'il
y aura une erreur d'intégrité. La stipulation de cette clause est donc fortement
conseillée.
Voici un exemple permettant de voir la syntaxe d'une instruction de création de table
avec contraintes:
CREATE TABLE clients(
Nom char(30) NOT NULL,
Prenom char(30) NOT NULL,
Age integer, check (age < 100),
Email char(50) NOT NULL, check (Email LIKE "%@%")
)
Grâce à SQL, il est possible de définir des clés, c'est-à-dire
spécifier la (ou les) colonne(s) dont la connaissance permet de désigner précisément
un et un seul tuple (une ligne).
- L'ensemble des colonnes faisant partie de la table en cours permettant
de désigner de façon unique un tuple est appelé clé primaire et se définit grâce à la clause PRIMARY KEY
suivie de la liste de colonnes, séparées par des virgules, entre parenthèses. Ces colonnes
ne peuvent alors plus prendre la valeur NULL et doivent être telles que deux lignes ne puissent avoir
simultanément la même combinaison de valeurs pour ces colonnes.
PRIMARY KEY (colonne1, colonne2, ...)
- Lorsqu'une liste de colonnes de la table en cours de définition permet de définir la clé
primaire d'une table étrangère, on parle alors de clé étrangère,
et on utilise la clause FOREIGN KEY suivie de la liste de colonnes de la table en cours de définition, séparées par des virgules, entre parenthèses,
puis de la clause REFERENCES suivie du nom de la table étrangère et de la liste de ses colonnes correspondantes, séparées par des virgules, entre parenthèses.
FOREIGN KEY (colonne1, colonne2, ...)
REFERENCES Nom_de_la_table_etrangere(colonne1,colonne2,...)
Les clés étrangères permettent de définir les colonnes d'une table
garantissant la validité d'une autre table. Ainsi, il existe des éléments
(appelés triggers, ou en français gâchettes ou déclencheurs)
permettant de garantir l'ensemble de ces contraintes que l'on désigne par le terme d'intégrité référentielle, c'est-à-dire
notamment de s'assurer qu'un tuple utilisé à partir d'une autre table existe
réellement.
Ces triggers sont ON DELETE et ON UPDATE:
- ON DELETE est suivi d'arguments entre accolades permettant de spécifier l'action à réaliser en cas
d'effacement d'une ligne de la table faisant partie de la clé étrangère:
- CASCADE indique la suppression en cascade des lignes de la table étrangère dont les clés étrangères
correspondent aux clés primaires des lignes effacées
- RESTRICT indique une erreur en cas d'effacement d'une valeur correspondant à la clé
- SET NULL place la valeur NULL dans la ligne de la table étrangère en cas d'effacement d'une valeur correspondant à la clé
- SET DEFAULT place la valeur par défaut (qui suit ce paramètre) dans la ligne de la table étrangère en cas d'effacement d'une valeur correspondant à la clé
- ON UPDATE est suivi d'arguments entre accolades permettant de spécifier l'action à réaliser en cas
de modification d'une ligne de la table faisant partie de la clé étrangère:
- CASCADE indique la modification en cascade des lignes de la table étrangères dont les clé primaires
correspondent aux clés étrangères des lignes modifiées
- RESTRICT indique une erreur en cas de modification d'une valeur correspondant à la clé
- SET NULL place la valeur NULL dans la ligne de la table étrangère en cas de modification d'une valeur correspondant à la clé
- SET DEFAULT place la valeur par défaut (qui suit ce paramètre) dans la ligne de la table étrangère en cas de modification d'une valeur correspondant à la clé
Les assertions sont des expressions devant être satisfaites lors de la modifications
de données pour que celles-ci puissent être réalisées. Ainsi,
elles permettent de garantir l'intégrité des données. Leur syntaxe est
la suivante:
CREATE ASSERTION Nom_de_la_contrainte CHECK (expression_conditionnelle)
La condition à remplir peut (et est généralement) être effectuée grâce à une
clause SELECT.
|
Les assertions ne sont pas implémentées dans l'ensemble des SGBDR...
|
|