Que sont les clés et les contraintes ?
Une base de données doit respecter certaines propriétés pour maintenir l’intégrité et la qualité des données qu’elle stocke. Les clés et les contraintes sont des règles qui définissent les valeurs de données autorisées dans certaines colonnes de données. Ils constituent un concept de base de données important et font partie de la définition de schéma d’une base de données. La définition des clés et des contraintes fait partie du processus de conception de la base de données et garantit que les données d’une base de données sont fiables et préservent leur intégrité. Les contraintes peuvent s’appliquer à une colonne spécifique, à une table entière, à plusieurs tables ou à un schéma entier. Un système de base de données fiable garantit que les contraintes tiennent en tout temps. Les clés sont un type spécial de contrainte utilisé pour établir des relations et un caractère unique.
Clé primaire
Une partie nécessaire de l’établissement de relations entre deux entités ou deux données consiste à identifier correctement les données. En SQL, l’identification unique des données est essentielle. Une clé primaire est un identifiant unique pour une ligne de données. Dans l’analogie de feuille de calcul que nous avons utilisée jusqu’à présent, il y a toujours eu une colonne id
. Bien que n’importe quelle colonne puisse servir de clé primaire, l’utilisation d’une colonne nommée id
est facile pour des raisons mnémotechniques et est une convention populaire. Dans un SGBDR, chaque table ne peut avoir qu’une seule clé primaire.
Une clé primaire est un identifiant unique garanti pour une ligne d’une table. Pour cette raison, nous pouvons utiliser la valeur de clé primaire d’une ligne pour référencer cette ligne à partir d’autres tables. Dans le chapitre précédent, nous avons établi des relations entre plusieurs tables sur cette base, mais les bases de données relationnelles ont besoin d’un moyen de se relier les unes aux autres, et la colonne de clé primaire est un moyen de le faire efficacement. Dans PostgreSQL, les clés primaires bénéficient également d’avantages en termes de performances, car on sait qu’elles seront fréquemment utilisées pour rechercher des données, en particulier dans les recherches multi-tables.
Sachez que toutes les colonnes nommées « id » ne sont pas des clés primaires ; ce n’est qu’une convention. De plus, les clés primaires peuvent avoir n’importe quel nom.
Nous avons déjà vu la syntaxe pour désigner une colonne comme colonne de clé primaire dans les chapitres précédents:
Jetons un coup d’œil à la commande ci-dessus qui crée une table appelée users
, du point de vue de la compréhension des clés primaires.
-
id
column est la clé primaire de cette table. On peut également dire que la contrainte de clé primaire a été appliquée à la colonneid
. -
id
ne peut contenir que des valeurs numériques (int
). - Pour chaque nouvelle ligne ajoutée à la table, le champ
id
sera automatiquement incrémenté de 1. Avec de nombreux SGBDR, le mot cléAUTO_INCREMENT
est utilisé. Avec PostgreSQL, nous utilisons serial pour incrémenter automatiquement nos ID et définir leur type comme entier. Il n’est pas nécessaire de spécifier manuellement la valeur de la clé primaire chaque fois que vous insérez des données, PostgreSQL le fera pour vous si vous spécifiez serial comme type d’id.
Clé étrangère
Les colonnes de clé étrangère sont utilisées pour référencer une autre ligne de données, peut-être dans une autre table. Afin de référencer une autre ligne, la base de données a besoin d’un identifiant unique pour cette ligne. Par conséquent, les colonnes de clés étrangères contiennent la valeur de la clé primaire de la ligne référencée. Par exemple, une table peut avoir une colonne appelée user_id
en tant que colonne de clé étrangère, qui correspond à la colonne id
de la table users
. Les clés étrangères permettent aux SGBDR de configurer les relations entre les lignes de données, soit dans la même table, soit entre les tables.
Vous pouvez voir dans l’instruction SQL ci-dessus que la ligne pour établir cette relation est
FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE
Dans l’exemple ci-dessus, id
est la clé primaire de la table books
, qui est utilisée pour établir une relation avec la table reviews. Les données id
sont stockées dans la table des avis dans le champ book_id
pour mapper les livres avec les avis. La clause ON DELETE CASCADE
indique que si un livre est supprimé, toutes les critiques associées à ce livre sont également supprimées.
Clé composite en tant que clé primaire
Dans le chapitre précédent, nous avons créé une relation plusieurs à plusieurs, dans laquelle notre clé primaire était composée de deux colonnes. Le user_id
et le book_id
formaient ensemble la clé primaire de la table de références croisées, comme on peut le voir dans cette ligne de l’instruction SQL.
PRIMARY KEY (user_id, book_id)
Lorsqu’une clé primaire est constituée d’une paire unique PRIMARY KEY (user_id, book_id)
, elle est appelée clé composite. Cela se produit généralement dans des relations plusieurs à plusieurs, et nous devons ajouter une table supplémentaire pour stocker ces données de relation. La clé composite garantit que les données de la table seront uniques pour la relation entre l’utilisateur et le livre. Exemple:
|User_id | Book_id | | 1 | 1 | | 1 | 2 | | 2 | 1 |
Contraintes UNIQUES
Outre la clé primaire, une base de données permet également d’appliquer une contrainte Unique sur n’importe quelle colonne de la base de données. Par exemple, dans le tableau livres, nous pouvons choisir non seulement d’avoir le book_id
comme clé primaire unique, mais également de stocker le numéro ISBN du livre. Le numéro de livre Standard international ISBN est un numéro unique à 10 chiffres pour un livre. Nous pouvons choisir de concevoir notre base de données pour rendre cette colonne unique. Même s’il ne s’agit pas d’une clé primaire, les ISBN en double ne seront pas autorisés dans le tableau livres et la qualité des données sera maintenue.
La contrainte unique interdit l’entrée en double dans la table books pour la valeur de la colonne isbn.
Contraintes NON NULLES
Nous avons vu « NOT NULL » dans beaucoup de nos instructions SQL. La contrainte NOT NULL
empêche une colonne d’autoriser une valeur nulle (c’est-à-dire que cette colonne doit contenir des données). Ceci est important pour les domaines clés. Par exemple : Si vous souhaitez ajouter un utilisateur à une base de données, vous devez fournir un nom d’utilisateur. Sans cette contrainte, la base de données serait remplie de valeurs nulles et deviendrait moins utile.
Comment SQL gère-t-il ces relations ?
PostgreSQL permet des relations entre le schéma et les données de différentes tables grâce à l’utilisation de CLÉS ÉTRANGÈRES et à une opération appelée JOIN
. Comme son nom l’indique, le but est de joindre des tables. Grâce à ce mécanisme, nous pouvons, par exemple, obtenir tous les détails de l’auteur de la table des revues ci-dessus, car il a un champ user_id
qui se rapporte à la table user
. Voici un exemple rapide:
Maintenant que nous comprenons comment créer plusieurs tables et le rôle que jouent les clés dans l’établissement des relations, nous examinerons plus en détail les différentes jointures et la manière dont les requêtes SQL sont construites à l’aide de ces jointures pour récupérer les données requises à partir de plusieurs tables.