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 : :
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.
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.