Notion de contraintes
Contrainte de domaine
Lorsque l'on définit une table, on définit également des contraintes sur cette table, qui serviront à contrôler son intégrité, par rapport à des règles que l'on aura fixées.
C'est notamment le cas des contraintes de domaine, qui permettent de vérifier qu'une colonne prend ses valeurs parmi un ensemble déterminé (les chaînes de 10 caractères au plus, les entier de 1 à 1000, etc.).
Question
Exécuter l'instruction suivante et expliquer pourquoi le système renvoie une erreur.
INSERT INTO tEtu (pk_numSecu, k_numEtu, nom, prenom)
VALUES ('XXXXXXXXXXXXXXX', 'XXXXXX', 'Dupont', 'Pierre');
Question
Donner un exemple de contrainte qui n'est pas formulée dans la définition de la table tEtu et que l'on aurait pu souhaiter.
Indice
Pour indiquer qu'un élément est obligatoire, on ajoute la clause NOT NULL
après la définition de son domaine dans l'instruction CREATE TABLE
.
Solution
Par exemple le fait que le nom et le prénom ne sont pas optionnels (tous les étudiants en ont un).
CREATE TABLE tEtu (
pk_numSecu CHAR(13) PRIMARY KEY,
k_numEtu VARCHAR(20) UNIQUE NOT NULL,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL);
Contraintes de clé
Les contraintes de clé se composent de contraintes d'unicité et de contraintes de non nullité. Elles permettent d'assurer que toutes les valeurs d'une colonne seront différentes pour chaque ligne.
Question
Exécuter les trois instructions suivantes (les unes après les autres) et expliquer ce qui se passe.
INSERT INTO tEtu (pk_numSecu, k_numEtu, nom, prenom)
VALUES ('1800675001066', 'HGYT67655Y', 'Dupont', 'Pierre');
INSERT INTO tEtu (pk_numSecu, k_numEtu, nom, prenom)
VALUES ('2810592012232', 'XGB67668', 'Durand', 'Anne');
INSERT INTO tEtu (pk_numSecu, k_numEtu, nom, prenom)
VALUES ('2810592012232', 'HGYT67655Y', 'Duchemin', 'Aline');
Solution
Explications
La première instruction est rejetée car le
pk_numSecu=1800675001066
existe déjàLa première instruction est rejetée car le
k_numEtu=XGB67668
existe déjàLa troisième instruction est exécutée, car les deux instructions précédentes ont été rejetées
Question
Explorer le contenu de votre table en exécutant l'instruction suivante, et vérifier vos explications précédentes.
SELECT *
FROM tEtu;
Question
Pourrait-on insérer dans la table une seconde personne qui aurait le prénom "Aline" et le nom "Duchemin" ? Pourquoi ?
Solution
Oui, car aucune contrainte n'impose le contrainte, seuls les numéros (sécurité sociale et numéro d'étudiant) doivent être uniques.