Chapitre 2: Schéma relationnel
Nous allons voir plus en détail ce que sont les bases de données relationnelles et mettre en évidence quelques anomalies qui peuvent être rencontrées.
1 Vocabulaire
Nous allons définir le vocabulaire de l’algèbre relationnelle inventée en 1970 par Edgar Frank Codd, et le mettre en relation avec le vocabulaire plus abordable des tableaux.
![Le vocabulaire des bases de données.](../../../../img/euQ9MTwIoU-300.webp)
- Relation
-
Dans le modèle relationnel, les données sont stockées dans des tables, aussi appelées relations.
L’illustration ci-dessus présente une relation appelée voiture
.
- Attribut
-
Le nom d’une colonne d’une relation est appelé attribut.
La relation voiture
possède trois attributs: marque
, couleur
et
plaque
.
- n-uplet
-
Un enregistrement (ligne) d’une relation est appelé n-uplet.
ID voiture
,marque
de la table voiture.ID carburant
,type
de la table carburant.
- Domaine
-
Le domaine d’un attribut est l’ensemble des valeurs qui peuvent être prises par cet attribut.
Une base de donnée sqlite il n’y a que cinq domaines de valeurs possibles:
NULL
. La valeur est une valeur NULL.INTEGER
. La valeur est un entier signé, stocké dans 1, 2, 3, 4, 6 ou 8 octets en fonction de l’amplitude de la valeur.REAL
. La valeur est une valeur à virgule flottante, stockée sous forme de nombre à virgule flottante IEEE de 8 octets.TEXT
. La valeur est une chaîne de texte, stockée à l’aide du codage de la base de données (UTF-8, UTF-16BE ou UTF-16LE).BLOB
. La valeur est une donnée binaire brute, stocké exactement comme elle a été entrée.
Dans le SGBD MariaDB il y a beaucoup plus de types avec notamment des formats pour les dates (voir doc).
Pour résumer, le tableau suivant montre celui, rigoureux, issu de l’algèbre relationnelle et celui, plus vague, correspondant à la représentation par table. Les termes de chaque ligne seront considérés comme équivalents, mais on privilégiera les premiers qui sont plus précis.
Terme de l’algèbre relationnelle | Terme de la représentation par table |
---|---|
Relation | Table |
n-uplet | ligne |
Nom d’attribut | Nom de colonne |
Valeur d’attribut | Cellule |
Domaine | Type |
2 Clés primaire et secondaire
- Clé primaire
-
Chaque ligne de la table doit comporter un attribut qui l’identifie de façon unique, on l’appelle la clé primaire.
- Dans la table
voiture
l’attributplaque
pourrait constituer la clé primaire. - En s’inscrivant sur un site, on vous impose d’utiliser un
identifiant
unique pour créer votre ligne dans la base de données. - L’email d’un utilisateur peut servir de clé primaire, mais ce n’est pas conseillé.
- Clé secondaire
-
Une clé secondaire ou clé étrangère est une clé utilisée dans une table pour faire référence à un enregistrement d’une autre table.
![La clé primaire ID carburant de la relation carburant sert de clé secondaire dans la relation voiture.](../../../../img/r5MFdUcvPR-300.webp)
L’ensemble constitué d’une clé primaire et d’une clé étrangère sert à établir des relations entre tables.
3 Contraintes d’intégrité
Les SGBD modernes permettent de garder les données conformes au modèle relationnel. Trois types de contraintes d’intégrité font partie intégrante du modèle de données relationnel:
- L’intégrité de clé primaire: cette règle stipule que chaque table doit avoir une clé primaire et que la ou les colonnes choisies pour être la clé primaire doivent être uniques et non nulles.
Dans la table voiture
essayez d’ajouter la troisième voiture avec l’ID 2, l’ajout sera refusé,
car ID voiture
a été déclaré comme clé primaire
- L’intégrité référentielle est une situation dans laquelle pour chaque information d’une table A qui fait référence à une information d’une table B, l’information référencée existe dans la table B.
Si vous tentez de supprimer la ligne 2 de la table carburant
, le SGBD vous le refusera en
raison de sa présence dans la table des voitures à la ligne de la BMW.
Il est aussi impossible d’ajouter dans la table voitures
un id carburant
qui
n’existe pas dans la relation carburant
.
- L’intégrité du domaine spécifie que toutes les colonnes d’une base de données relationnelle doivent être déclarées sur un domaine défini.
S’assurer qu’une valeur est bien un email, un numéro de téléphone ou un code postal.
Le support des types dans sqlite étant relativement limité, vous pouvez par exemple vérifier qu’on ne peut
ajouter un id voiture
qui ne soit pas un entier comme A
par exemple.
Une fois la contrainte déclarée, le SGBD refusera toute modification du contenu de la base de données qui violerait une de ces règles et casserait l’intégrité.
4 Exemples d’anomalies
Nous allons montrer sur un l’exemple d’une base de donnée de DVD mal construite quels types d’anomalies peuvent apparaître.
Mirian Halfeld-Ferrari Université d’Orléans
Comme vous le voyez cette table est mal construite:
- Les données sont redondantes: À chaque fois qu’un film apparaît, les valeurs pour le genre, length et rating apparaissent aussi.
- Les attributs concernent à la fois le DVD et le film, il faudrait créer des tables séparées.
Maintenant, intéressons-nous aux anomalies qui pourraient se présenter:
- Anomalie de mise à jour: Que se passe-t-il si le film
Elisabeth
est renomméÉlisabeth
pour satisfaire les clients francophones? - Anomalie d’insertion: Que se passe-t-il avec l’insertion du n-uplet :
〈102,1/1/99, Elisabeth, drama,110, PG13〉
- Anomalie de suppression: Que se passe-t-il lors de la suppression du DVD numéro
123
?
5 Comment concevoir une base de données bien structurée?
Une base de données bien structurée:
Le processus de conception peut-être scindé comme suit:
L’utilisation d’un diagramme relationnel aide à visualiser les relations entre les données.
Voici l’exemple de la base de données «Rock60» qui rassemble des données sur les albums de rock des années 60 ainsi que les musiciens et producteurs qui y ont participé.
Outre l’utilisation de clés primaires et secondaires, on a ajouté des tables particulières qui permettent de relier deux tables lorsque qu’on a une relation dite N:N.
Une personne peut jouer dans plusieurs groupes et un groupe est constitué de plusieurs personnes.
La table
Joue Dans
permet d’exprimer cette relation en utilisant deux clés étrangères.En étudiant le schéma ci-dessus:
Joue Dans
.