Assurer l’intégrité des données dans une base de données est un défi crucial.
Sans des règles strictes, vos données peuvent devenir incohérentes et peu fiables, compromettant la qualité de l’information.
Les contraintes SQL vous permettent d’imposer des règles solides, garantissant la cohérence et la fiabilité de vos données.
Appréhendez les fondamentaux du langage SQL pour savoir assimiler ses fonctions standards.
Une contrainte d’intégrité est une clause permettant de contraindre la modification de tables dans une base de données. Elle permet d’assurer la cohérence des données en imposant certaines règles. Les contraintes peuvent être spécifiées dès la création de la table ou ajoutées par la suite à l’aide de la commande ALTER TABLE.
- Syntaxe pour créer une table avec des contraintes :
CREATE TABLE nom_table (
nom_champ type_de_donnée CONSTRAINT nom_contraint type_contrainte,
...
);
- Syntaxe pour ajouter une contrainte :
ALTER TABLE nom_table
ADD CONSTRAINT nom_contraint type_contrainte;
Contraintes SQL : Types et Rôle
Voici les principales contraintes que vous devez connaître :
Type de contrainte | Description |
---|---|
NOT NULL | Cette contrainte empêche l’insertion de valeurs nulles dans une colonne. Cela garantit que chaque enregistrement aura une valeur pour cette colonne. |
PRIMARY KEY | Une clé primaire identifie de manière unique chaque enregistrement dans une table. Une colonne définie comme clé primaire ne peut pas avoir de valeurs nulles et doit contenir des valeurs uniques. |
UNIQUE | Cette contrainte garantit que toutes les valeurs dans une colonne sont distinctes. Elle permet d’empêcher l’insertion de doublons dans la colonne spécifiée. |
REFERENCES | Utilisée pour établir une clé étrangère, cette contrainte lie une colonne dans une table à une colonne dans une autre table, assurant ainsi l’intégrité référentielle. |
DEFAULT | Cette contrainte définit une valeur par défaut pour une colonne lorsqu’aucune valeur n’est spécifiée lors de l’insertion d’un nouvel enregistrement. |
CHECK | Cette contrainte impose une condition sur les valeurs d’une colonne. Par exemple, elle peut être utilisée pour s’assurer qu’une valeur est supérieure à un certain nombre. |
Possibilité de nommer une contrainte | Lorsque vous créez ou modifiez une contrainte, vous pouvez lui attribuer un nom personnalisé à l’aide de la clause CONSTRAINT. Cela facilite la gestion et la référence ultérieure à cette contrainte. |
Tableau 4 : les principales contraintes en SQL
- Exemple de mise en œuvre
Ce schéma présente la modélisation d’une base de données pour la gestion des conducteurs et des véhicules. Il se compose de deux tables principales :
Table CONDUCTEURS
- Objectif :Stocker les informations relatives aux conducteurs, tels que leur nom, prénom, âge, adresse mail, etc.
- Contraintes :
La colonne CODE_CONDUCTEUR est la clé primaire, garantissant que chaque conducteur ait un identifiant unique .
Des contraintes de validation sont appliquées sur les données, comme :
- L’âge doit être compris entre 18 et 70 ans.
- L’adresse mail doit être unique pour chaque conducteur .
- La date de location a une valeur par défaut qui est la date actuelle.
- Le département doit être compris entre 01 et 95.
Table VEHICULES
- Objectif :Enregistrer les informations relatives aux véhicules, comme la marque, le modèle, et le nombre de places.
- Contraintes :La colonneIMMAT (immatriculation)est la clé primaire, assurant quechaque véhiculeait un identifiantunique.La colonneCODE_CONDUCTEURest une clé étrangère, faisantréférenceà la tableCONDUCTEURS. Cela établit une relation entre les véhicules et les conducteurs, garantissant que chaque véhicule soit associé à un conducteur existant.Le nombre de places (NBR_PLACE)dans un véhicule doit être compris entre 1 et 7.
Relations
La clé étrangère entre la table VEHICULES et la table CONDUCTEURS permet de lier un véhicule à un conducteur, assurant ainsi que les véhicules ne peuvent être attribués qu’à des conducteurs valides. Ce schéma garantit l’intégrité des données et la cohérence des informations dans la base de données.
- Création de la table CONDUCTEURS
CREATE TABLE CONDUCTEURS (
CODE_CONDUCTEUR INT PRIMARY KEY, -- Clé primaire
NOM VARCHAR(50) NOT NULL, -- NOT NULL
PRENOM VARCHAR(50) NOT NULL, -- NOT NULL
AGE INT CHECK (AGE BETWEEN 18 AND 70), -- Vérification de l'âge entre 18 et 70
MAIL VARCHAR(100) UNIQUE, -- Adresse email doit être unique
DATE_LOCATION DATE DEFAULT GETDATE(), -- Date avec valeur par défaut du jour
ADRESSE VARCHAR(100),
DEPARTEMENT INT NOT NULL -- NOT NULL
);
ALTER TABLE CONDUCTEURS ADD CONSTRAINT chk_Departement CHECK (DEPARTEMENT BETWEEN 01 AND 95);
Explications :
- CODE_CONDUCTEUR :Cette colonne est définie comme une clé primaire. Elle estuniqueetne peut pas être nulle.
- NOM et PRENOM :Ces champs ne peuvent pas accepter de valeurs nulles grâce à la contrainteNOT NULL.
- AGE :La contrainte CHECKassure que l’âge du conducteur soit compris entre 18 et 70 ans.
- MAIL :Ce champ estunique,empêchant plusieurs conducteurs d’avoir le même email.
- DATE_LOCATION :La date de location prend par défaut la date du jour grâce àDEFAULT GETDATE().
- DEPARTEMENT :La contrainte CHECKgarantit que le département soit compris entre 01 et 95.
Résultats obtenus
Voilà, après l’exécution de cette requête pour la création de la table conducteur avec ses contraintes, nous trouvons le résultat suivant :
Et voilà l’affichage des contraintes de cette table dans un répertoire dans MSSMS :
- Exemple de test l’un des contraints
Lorsque vous essayez d’insérer une valeur NULL dans le champ PRENOM qui a une contrainte NOT NULL selon le schéma. Cela entraînera une erreur car le champ PRENOM ne peut pas accepter de valeurs nulles.
Voici la requête que vous avez créez :
INSERT INTO CONDUCTEURS VALUES (1, 'Harabazan', NULL,20,
'harabazan@alphorm.com', DEFAULT, NULL, 101);
- Résultat attendu :
Correction de l’erreur :
Pour résoudre ce problème, vous devez insérer une valeur non-nulle pour le champ PRENOM . Et une valeur valide dans la plage entre 1 et 95 pour le champ DEPARTEMENT . Par exemple :
INSERT INTO CONDUCTEURS VALUES (1, 'Harabazan', 'hamid',32, 'harabazan@alphorm.com', DEFAULT, NULL, 75);
Et voilà le résultat lorsque nous effectuons une vérification avec cette requête de sélection :
SELECT * FROM CONDUCTEURS
- Création de la table VEHICULES
CREATE TABLE VEHICULES (
IMMAT VARCHAR(20) PRIMARY KEY, -- Clé primaire
CODE_CONDUCTEUR INTEGER NOT NULL, -- Clé étrangère, ne peut pas être NULL
MARQUE CHAR(20) NOT NULL, -- Marque du véhicule, ne peut pas être NULL
MODELE VARCHAR(50), -- Modèle du véhicule
NBR_PLACE INTEGER NOT NULL, -- Nombre de places, ne peut pas être NULL
CONSTRAINT FK_CODE_CONDUCTEUR FOREIGN KEY (CODE_CONDUCTEUR) REFERENCES CONDUCTEURS (CODE_CONDUCTEUR), -- Clé étrangère
CONSTRAINT chk_nbr_place CHECK (NBR_PLACE BETWEEN 1 AND 7) -- Vérifie que le nombre de places est entre 1 et 7
);
Explications :
- IMMAT :La clé primaire pour la tabledes véhicules, qui doitêtre unique.
- CODE_CONDUCTEUR :Champ de type INTEGER, qui est une clé étrangère reliant la table VEHICULES à latable CONDUCTEURS.Il ne peut pas être NULL, garantissant qu’un véhicule doit toujours être associé à un conducteur existant.
- MARQUE :Champ de type CHAR(20) pour la marque du véhicule, quine peut pas être NULL.
- MODELE :Champ de type VARCHAR(50) pour le modèle du véhicule,pouvant être NULL.
- NBR_PLACE :Champ de type INTEGER pour le nombre de places dans le véhicule, quine peut pas être NULL.
- CONSTRAINT FK_CODE_CONDUCTEUR :Cette contrainte définitCODE_CONDUCTEURcomme une clé étrangère, garantissant que chaque véhicule est associé à un conducteur existant dans la table CONDUCTEURS.
- CONSTRAINT chk_nbr_place :Cettecontrainte CHECKassure que le nombre de places dans un véhicule est compris entre 1 et 7.
- Résultat attendu :
La création de cette table avec les contraintes définies garantit l’intégrité des données et respecte les règles d’association entre les tables.
Et voilà que l’on se trouve dans le répertoire des clés et des contraintes :
Pour tester les contraintes de la table VEHICULES, vous pouvez utiliser la requête d’insertion suivante :
INSERT INTO VEHICULES VALUES ('1889TP74', 2, 'OPEL', 'Frontera', 10);
- Résultat affiché :
Voici un exemple d’insertion valide :
INSERT INTO VEHICULES VALUES ('1889TP74', 1, 'OPEL', 'Frontera', 7);
Et voilà le résultat lorsque nous effectuons une vérification avec cette requête de sélection :
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Qu'est-ce qu'une contrainte en SQL ?
Quels types de contraintes SQL existe-t-il ?
Comment ajouter une contrainte à une table existante ?
Pourquoi utiliser une clé étrangère en SQL ?
Comment garantir l'unicité des enregistrements dans une table SQL ?
Conclusion
En maîtrisant les contraintes en SQL, vous assurez la cohérence et l’intégrité de vos données. Comment allez-vous appliquer ces principes dans vos projets futurs ?