Intégrité des données et clé primaire (unique, constraint, primary key)

Contraintes d'intégrité et base de données

Une expression de contraintes d'intégrité permet de fixer des règles auparavant sur la modification d'une table. Autrement dit, elle aide à s'assurer que les données saisies lors d'un lancement de requêtes utilisateur sont conformes aux données attendues.

Par exemple, une réponse doit être oui ou non, alors que l'utilisateur a saisi une autre réponse.

Nommer une contrainte d'intégrité

La clause CONSTRAINT suivi du nom de la contrainte permet de donner un nom à la contrainte. Ce nom s'affiche alors en cas de non respect de la règle d'intégrité définie.

L'attribue d'un nom à l'aide la clause CONSTRAINT est alors avantageux sachant que le système peut le faire à notre place si nous n'avons rien fixé au départ. Dans ce cas, il y a des fortes chances que le nom arbitraire attribué par le système ne soit pas compréhensible en cas d'erreur et on ne saura pas facilement de quelle contrainte il s'agit.

Éviter les champs vides dans une table : NOT NULL

Il se peut qu'on ait des champs qui doivent vraiment contenir des valeurs. Dans ce cas on a deux solutions :

  • Soit forcer carrément la saisie d'un champ c'est-à-dire spécifier qu'un champ doit être saisi
  • Soit attribuer une valeur par défaut au champ pour garantir que le champ ne sera pas vide
  • Pour la première solution, le mot clé NOT NULL permet de préciser que la saisie de ce champ est obligatoire

Requête SQL

CREATE TABLE etudiant (
id_etudiant int(5) NOT NULL,
nom varchar(5) NOT NULL,
prenom varchar(30) NOT NULL,
domicile text NOT NULL,
);

 

Dans cet exemple, tous les champs de la table etudiant doivent être saisis. En optant pour la seconde solution, on fait appel à la clause DEFAULT pour définir une valeur par défaut lorsque ce champ n'est pas saisi.

Faire des tests sur les valeurs

Unicité d'une valeur : UNIQUE

Pour tester l'unicité d'une valeur saisie pour un champ, on utilise la clause UNIQUE. En utilisant cette clause, on peut s'assurer que toutes les valeurs d'une colonne d'une table seront alors différentes (par exemple, toutes les adresses email seront différentes)

Condition sur un champ : CHECK

Il est aussi possible de faire un test sur un champ à l'aide de la clause CHECK(). On lui attribue comme paramètre une condition logique entre les parenthèses. Voyons cela plus clairement à l'aide d'un exemple.

Requête SQL

CREATE TABLE etudiant(
id_etudiant int( 5 ) NOT NULL ,
nom varchar( 5 ) NOT NULL ,
prenom varchar( 30 ) NOT NULL ,
moyenne int( 5 ) NOT NULL ,
CHECK (
moyenne <20
),
domicile text NOT NULL ) ;

 

Enregistrement et Clé primaire

Chaque ligne d'une table correspond à un enregistrement. Un des objectifs principaux d'une base de données est d'éviter la redondance de données. Il ne doit pas y avoir de répétitions dans une base de données. Sinon on a ce que l'on appelle des doublons. Un doublon est deux enregistrements (ou plus) identiques.

Voici un exemple : :

Exemple de table avec doublon
prenom ville
patrick st rambert
patrick st rambert

Pour prendre garde à cela, on utilise une clé primaire qui sert d'identifiant unique pour chaque ligne. S'il y a vraiment deux Patrick qui viennent de st rambert, on peut les différencier avec un autre champ qui sert alors de clé primaire.

Exemple de table avec identifiant
id prenom ville
1 patrick st rambert
2 patrick st rambert

Le mot clé primary key permet de définir un champ qui servira de clé primaire. Par exemple, dans la table etudiant, le champ id_etudiant est une clé primaire qui sert d'identifiant unique pour un étudiant. Autrement dit, deux étudiants différents ne peuvent avoir le même numéro.

Requête SQL

CREATE TABLE etudiant(
id_etudiant int( 5 ) NOT NULL ,
nom varchar( 5 ) NOT NULL ,
prenom varchar( 30 ) NOT NULL ,
moyenne int( 5 ) NOT NULL ,
CHECK (
moyenne <20
),
domicile text NOT NULL ,
PRIMARY KEY ( id_etudiant )
);

 

On peut aussi facilement faire l'ajout d'une clé primaire en modifiant la structure de la table. Autrement dit, si la table a été déjà créée, on peut ajouter la clé primaire en utilisant après la commande ALTER TABLE ;

ALTER TABLE etudiant ADD PRIMARY KEY(id_etudiant) ;

 

On peut donc choisir un champ de la table pour définir la clé primaire. Toutefois le choix doit être fait de manière très rigoureuse selon le contexte. Par exemple, le prénom, ou la date de naissance ne peut pas être choisi comme clé primaire puisque deux personnes différentes peuvent avoir le même prénom, ou la même date de naissance et ceci contredirait l'unicité de la clé primaire.

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence SEO Aseox.