Vos données ne sont bonnes que si vous pouvez leur faire confiance. Utilisez les contraintes de la base de données pour garantir qu'elle est précise, fiable et qu'elle ne brise pas votre modèle de données.
Points clés à retenir
- Utilisez les contraintes SQL pour maintenir l’intégrité des données et garantir l’uniformité de votre base de données. La contrainte NOT NULL force les colonnes à rejeter les valeurs NULL.
- Implémentez des contraintes de clé primaire pour garantir l’unicité des valeurs dans une colonne ou un ensemble de colonnes. Cela évite les enregistrements en double dans une table de base de données.
- Les contraintes de clé étrangère établissent des relations entre les tables et empêchent les actions qui détruiraient les liens entre elles. Ils garantissent qu'un enregistrement dans la table enfant fait référence à la table parent.
Une base de données est essentielle pour de nombreuses applications, mais elle peut devenir compliquée si vous ne disposez pas de directives pour le stockage et le traitement des données.
Les contraintes SQL spécifient les règles de stockage des données dans une table. Lorsque vous définissez des contraintes, la base de données génère une erreur si vous essayez de stocker des données qui enfreignent ces règles. Les contraintes aident à maintenir l’intégrité des données et à garantir l’uniformité de votre base de données.
Il existe plusieurs types de contraintes SQL que vous pouvez utiliser; voici quelques-uns des plus utiles.
1. Contrainte NOT NULL
Les colonnes de base de données, par défaut, acceptent les données avec des valeurs NULL. NULL signifie essentiellement qu’aucune valeur n’existe. La contrainte NOT NULL force une colonne à rejeter les valeurs NULL.
Cette contrainte garantit que chaque colonne doit contenir une valeur. Vous ne pouvez pas ajouter un enregistrement à la base de données sans fournir de données pour les colonnes avec la contrainte NOT NULL.
Prenons l'exemple d'un Clients tableau. Vous souhaitez enregistrer certains détails nécessaires sur chaque client, comme son nom. Ajoutez la contrainte NOT NULL aux champs obligatoires pour garantir que les clients fournissent ces informations.
Voici un exemple montrant comment utiliser la contrainte NOT NULL dans un Base de données PostgreSQL:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Si vous essayez d'insérer un enregistrement client sans le Âge champ, la base de données l'acceptera sans erreur :
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Cependant, si vous essayez d'insérer un enregistrement sans le Prénom champ, la base de données le rejettera avec un message d'erreur :
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. Contrainte CLÉ PRIMAIRE
Une KEY est un attribut unique défini sur une colonne ou un champ qui identifie le tuple d'une table (ou un enregistrement) dans les systèmes de base de données. Une contrainte PRIMARY KEY garantit l’unicité des valeurs dans une colonne ou un ensemble de colonnes. Il agit comme un identifiant unique dans une ligne, empêchant les enregistrements en double dans une table de base de données.
Les clés primaires contiennent des valeurs uniques et ne peuvent pas contenir de valeurs NULL. Chaque Table de base de données SQL ne doit avoir qu’une seule clé primaire. La PRIMARY KEY peut avoir une ou plusieurs colonnes.
Par exemple, vous créez une base de données d’enregistrements clients. Vous avez besoin que chaque client saisisse son numéro d’identification différemment des autres. Vous pouvez appliquer la contrainte de clé primaire pour vous assurer qu'aucun de vos clients n'a le même numéro d'identification.
Le code suivant montre comment introduire une contrainte de clé primaire dans une base de données MySQL :
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
La base de données n'acceptera pas cette valeur si un utilisateur saisit un autre enregistrement avec un ID similaire. Au lieu de cela, il générera une erreur indiquant la duplication. L'utilisateur tente d'insérer deux enregistrements avec le même ID dans l'exemple suivant :
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
La base de données affichera un message d'erreur :
Duplicate entry '1' for key 'PRIMARY'
Mais si vous modifiez l'ID du deuxième client, la base de données accepte l'entrée. Par conséquent, la clé primaire garantit l’absence d’identifiants en double dans vos enregistrements clients.
3. Contrainte DE CLÉ ÉTRANGÈRE
Clés étrangères établir des relations entre deux tables. Vous pouvez ajouter une clé étrangère à un champ/colonne d'une table qui fait référence à la clé primaire d'une autre table.
La table avec la clé primaire est la table parent, tandis que la table avec la clé étrangère est la table enfant. Un enregistrement ne peut alors exister dans la table enfant sans référence à la table parent.
La contrainte de clé étrangère empêche les actions qui détruiraient les liens entre les tables. Par exemple, vous ne pouvez pas BAISSE une table si elle est liée à une autre avec une clé étrangère. Vous devrez supprimer les deux tables en même temps.
Contrairement à une clé primaire, vous pouvez dupliquer une clé étrangère et en avoir plusieurs dans une seule table. Les valeurs de clé étrangère peuvent également être NUL. Dans l'exemple suivant, vous devez utiliser le N ° de client pour créer une commande.
CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');
INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');
Si vous essayez de créer une commande sans N ° de client, la base de données affiche un message d'erreur :
Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))
4. Contrainte unique
Cette contrainte garantit que deux lignes ne peuvent pas avoir les mêmes valeurs pour une colonne spécifique. Comme les clés primaires, une contrainte unique maintient l’intégrité des données et empêche les entrées en double. Si vous travaillez avec une base de données mal conçue sans la contrainte UNIQUE, vous risquez de devoir trouver et supprimer les doublons.
Contrairement aux clés primaires, vous pouvez avoir de nombreuses contraintes UNIQUE sur une seule table. Par exemple, lors de la création d'un Clients table, vous souhaiterez peut-être avoir des identifiants et des numéros de téléphone uniques. Pour ajouter une telle contrainte à l'aide du serveur MySQL, utilisez cette syntaxe :
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Si vous insérez des enregistrements avec le même numéro de mobile dans la base de données, un message d'erreur s'affichera.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Le message d'erreur ressemblera à ceci :
Duplicate entry '254000000' for key 'Mobile_No'
Cette contrainte UNIQUE garantit que la base de données n'aura pas de clients avec les mêmes identifiants ou numéros de mobile.
5. Contrainte CHECK
La contrainte CHECK limite la plage de valeurs placée dans une colonne. L'ajout d'une contrainte CHECK sur une colonne autorisera uniquement les valeurs spécifiées pour cette colonne. Il garantit l'intégrité des données en garantissant qu'un utilisateur insère uniquement des données valides dans une table.
La contrainte CHECK doit évaluer une valeur comme TRUE ou UNKNOWN pour chaque ligne ou entrée de table spécifiée. Si la valeur est FALSE, la base de données affiche un message d'erreur.
Par exemple, dans le tableau Clients, vous souhaiterez peut-être servir uniquement les clients de plus de 18 ans. Vous pouvez ajouter une contrainte CHECK pour vous assurer de ne pas servir de clients mineurs. Vous pouvez ajouter la contrainte dans une base de données PostgreSQL, comme indiqué dans le code suivant :
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Maintenant, si vous essayez d'insérer un âge inférieur à 18 ans pour un client :
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
La base de données affichera un message d'erreur comme celui-ci :
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
Comment ajouter et supprimer des contraintes SQL des bases de données
Les contraintes SQL ne sont pas gravées dans le marbre. Vous pouvez ajouter ou supprimer des contraintes sur les tables existantes à l'aide de l'instruction ALTER TABLE. L'instruction ALTER vous permet de travailler avec des contraintes adaptées à vos besoins en données.
Il existe de nombreuses autres contraintes SQL que vous pouvez apprendre pour concevoir une base de données à votre guise. Vous pouvez commencer par ceux répertoriés dans cet article.