Les bases de données
Une base de données est un ensemble d'informations structurées dans des tables. Celles-ci sont conçues pour permettre un accès simplifié aux informations stockées, et donc de les modifier, les supprimer, voire même en rajouter.
Il existe un type de fichier, le CSV (vu en classe de Première), permettant également le stockage d'informations (de façon moins efficace) :
En CSV, la première ligne correspond aux attributs de la table, et les lignes suivantes, les enregistrements, correspondent aux données saisies pour chaque attributs.
Le mode de fonctionnement est similaire avec les bases de données, il est appelé modèle relationnel.
Les bases de données s'appuient sur 4 concepts fondamentaux pour la bonne gestion des opérations à effectuer. L'approche ACID s'assure que toutes les opérations soient traitées de façon fiable
. ACID est l'acronyme des termes : Atomicité, Cohérence, Isolation et Durabilité :
- Atomicité
- Cohérence
- Isolation
- Durabilité
Tous les changements à effectuer doivent être accomplis jusqu'au bout. Si une opération est arrêtée subitement (coupure internet, etc), l'opération est annulée est la base retourne à son état avant modification.
On s'assure que les opérations respectent bien les contraintes d'intégrité.
Toutes les opérations à réaliser le sont en série
, c'est-à-dire qu'on ne fait pas toutes les opérations en une fois, elles sont faites succintement.
On s'assure que tous les changements apportés à la base de données restent de façon permanente, même en cas de défaillance (pannes, etc).
Le modèle relationnel
Le modèle relationnel représente des données sous la forme d’un tableau, aussi appelé relation ou table.
La première ligne correspond à l’ensemble des attributs de la table, c'est-à-dire le nom de chaque attribut, avec le type de la donnée.
Les lignes suivantes sont l’ensemble des informations saisies. Les lignes sont appelées un n-uplet, ou enregistrements.
Exemple avec la table Élèves :
Nom | Prénom | Âge | Classe |
---|---|---|---|
Dupont | Marie | 17 | 1G1 |
Martin | Lucas | 16 | 2G3 |
Bernard | Clara | 18 | TG2 |
Petit | Thomas | 17 | 1G2 |
Moreau | Julie | 16 | 2G1 |
Lefevre | Léo | 19 | TG1 |
Simon | Emma | 17 | 1G3 |
Lemoine | Maxime | 16 | 2G2 |
Girard | Anna | 18 | TG3 |
Rousseau | Hugo | 17 | 1G4 |
Il y a 10 enregistrements (ou n-uplet) dans la relation Élèves. Les attributs sont donc "Nom", "Prénom", "Age", "Classe" avec respectivement comme domaine : chaîne de caractères, chaîne de caractères, entier et chaîne de caractères.
On appelle "domaine" le type d'un attribut. Le domaine peut être un entier, une chaîne de caractères, une date... Les bases de données s'assurent que les données saisies correspondent bien au domaine des attributs.
Les clés
Pour identifier précisément les enregistrements (et éviter des anomalies), et/ou permettre de lier les informations de différentes tables, certains attributs peuvent être des clés primaires ou clés étrangères.
Clé primaire
Une clé primaire permet d'identifier de façon unique
un enregistrement dans une table.
Très souvent, on retrouve dans les tables un attribut correspondant à un identifiant, correspondant à un numéro unique pour chaque enregistrement.
L'objectif d'une clé primaire est donc de pouvoir retrouver directement toutes les informations d'un enregistrement, simplement grâce à la valeur de sa clé primaire.
Un exemple de tous les jours : chaque français dispose d'un numéro de sécurité sociale. Ce numéro est unique, et on pourrait donc imaginer qu'il existerait une base de données dont le numéro de sécurité sociale serait clé primaire, et permettrait de retrouver toutes les informations d'un individu (nom, prénom, date de naissance, lieu de naissance ...).
De façon globale, n'importe quel domaine d'attribut pourrait être une clé primaire, tant que l'on s'assure que sa valeur reste unique dans la table.
L'attribut Nom
ne pourrait pas être clé primaire, sinon cela voudrait dire qu'il ne pourra jamais y avoir 2 élèves avec le même nom de famille.
Pareillement, l'attribut Prénom
ne le pourrait pas.
Pour l'attribut Age
, cela signifierait que chaque élève doit absolument avoir un âge différent.
Pour l'attribut Classe
, on aurait donc juste un seul élève par classe.
Il faudrait donc rajouter un attribut identifiant
, par exemple :
Identifiant | Nom | Prénom | Âge | Classe |
---|---|---|---|---|
1 | Dupont | Marie | 17 | 1G1 |
2 | Martin | Lucas | 16 | 2G3 |
3 | Bernard | Clara | 18 | TG2 |
4 | Petit | Thomas | 17 | 1G2 |
5 | Moreau | Julie | 16 | 2G1 |
6 | Lefevre | Léo | 19 | TG1 |
7 | Simon | Emma | 17 | 1G3 |
8 | Lemoine | Maxime | 16 | 2G2 |
9 | Girard | Anna | 18 | TG3 |
10 | Rousseau | Hugo | 17 | 1G4 |
Clé étrangère
Quand il existe plusieurs tables dont les informations coexistent, il faut pouvoir déterminer quel enregistrement d’une table est en lien avec un ou plusieurs enregistrements d’une autre table.
La clef étrangère d’une table se réfère obligatoirement
à la clef primaire d’une autre, c’est-à-dire qu’on peut récupérer les informations associées.
On crée une nouvelle table appelée Eleve_Matière, permettant d'associer à des élèves une matière :
identifiant | id_eleve | matière |
---|---|---|
1 | 3 | Mathématiques |
2 | 7 | Physique |
3 | 1 | Littérature |
4 | 5 | Histoire |
5 | 9 | Biologie |
6 | 2 | Chimie |
7 | 4 | Anglais |
8 | 10 | Géographie |
9 | 6 | Informatique |
10 | 8 | Éducation civique |
11 | 3 | Arts |
12 | 1 | Sport |
13 | 5 | Philosophie |
14 | 2 | Musique |
15 | 10 | Technologie |
identifiant
est une clé primaire.
id_eleve
est une clé étrangère qui fait référence à la clé primaire identifiant
de la table Élève.
A la ligne 1, on peut donc lire : Élève dont l'id est 3 est inscrit en mathématiques. D'après la table Élève, l'id 3 est Bernard Clara, donc Bernard Clara suit les mathématiques.
Le modèle Entité/Association et le schéma relationnel
Visualiser une base est importante pour comprendre les liens entre les différentes tables.
Le modèle entité/Association permet de mettre sous la forme d'un schéma l'ensemble des tables (avec les attributs) reliées entre elles :
Il est représenté de la même façon que les diagrammes UML en programmation objet.
Cependant, les clés primaires doivent être soulignées
, et les clés étrangères doivent être soulignées en pointillé OU avec un # devant
.
Le schéma relationnel représente les tables de cette façon :
Élève(Identifiant : int, Nom : str, Prénom : str, Age : int)
Élève_Matière(Identifiant : int, #Id_eleve : int, Matière : str)
Les contraintes d'intégrités
Pour avoir des bases de données fonctionnelles, elles doivent respecter un ensemble de contraintes, que l'on appelle contrainte d'intégrité
:
- Intégrité du domaine
- Intégrité de relation
- Intégrité de référence
Les valeurs doivent appartenir au domaine fixé
pour chaque attribut (pas d’entier là où il faut des caractères …).
Chaque n-uplet est unique et doit être identifié par une clé primaire qui ne peut être nulle
.
Toute clé étrangère doit correspondre
à une clé primaire existante.
👉 Aller à l'activité ici 👈
Les anomalies
Si l'on ne réfléchit pas suffisamment à la construction des tables, il peut y avoir la présence d'anomalies :
- La redondance d'information
- L'anomalie de suppression
- L'anomalie de modification
- L'anomalie d'insertion
Cette anomalie est celle qui - de façon généralisée - cause des soucis lors des manipulations sur la base (modification, suppression).
Elle consiste à avoir, dans une table, des attributs dont les informations vont être redondantes.
Id | Nom | Prénom | Date_naissance | Ville_naissance | Maire |
---|---|---|---|---|---|
1 | Durand | Jean-Pierre | 23/05/1985 | Paris | Anne Hidalgo |
2 | Dupont | Christophe | 15/12/1967 | Paris | Anne Hidalgo |
3 | Terta | Henry | 12/06/1978 | Nice | Christian Estrosi |
Dans cet exemple nous avons les attributs Ville_naissance
et Maire
. Maire
est l'attribut présentant une redondance d'information, puisque celle-ci est obligatoirement répétée suivant la ville de naissance des individus.
Pour chaque individu né à Paris, l'information Anne Hidalgo
sera forcément enregistré, et donc, plusieurs fois.
En lien avec la première anomalie, cette anomalie indique que lors de la suppression d'un ou plusieurs enregistrements, certaines informations peuvent être perdues :
Id | Nom | Prénom | Date_naissance | Ville_naissance | Maire |
---|---|---|---|---|---|
1 | Durand | Jean-Pierre | 23/05/1985 | Paris | Anne Hidalgo |
2 | Dupont | Christophe | 15/12/1967 | Paris | Anne Hidalgo |
3 | Terta | Henry | 12/06/1978 | Nice | Christian Estrosi |
Si l'on supprime l'enregistrement dont l'identifiant est 3, on perd ainsi l'information que Christian Estrosi
est le maire de Nice
.
Il y a une anomalie dans la suppression de mes données.
Également en lien avec la première anomalie, celle-ci indique que, lorsque des modifications sont effectuées sur des enregistrements, elles devraient avoir des répercussions sur les autres enregistrements disposant des mêmes informations.
Soit la table suivante :
Id | Nom | Prénom | Date_naissance | Ville_naissance | Maire |
---|---|---|---|---|---|
1 | Durand | Jean-Pierre | 23/05/1985 | Paris | Anne Hidalgo |
2 | Dupont | Christophe | 15/12/1967 | Paris | Anne Hidalgo |
3 | Terta | Henry | 12/06/1978 | Nice | Christian Estrosi |
4 | Grimard | Aubin | 25/11/1986 | Marseille | Benoît Payan |
Je souhaite changer l'information du maire de Paris de l'enregistrement 1, et indique que finalement Christian Estrosi
est maire de Marseille. Cela donnerait la table suivante :
Id | Nom | Prénom | Date_naissance | Ville_naissance | Maire |
---|---|---|---|---|---|
1 | Durand | Jean-Pierre | 23/05/1985 | Paris | Lucien Martin |
2 | Dupont | Christophe | 15/12/1967 | Paris | Anne Hidalgo |
3 | Terta | Henry | 12/06/1978 | Marseille | Christian Estrosi |
4 | Grimard | Aubin | 25/11/1986 | Marseille | Benoît Payan |
Il y a maintenant des incohérences dans ma table. Paris ne peut pas avoir 2 maires différents, et 2 personnes ne peuvent pas être maires d'une même ville.
Il y a une anomalie dans les modifications de mes données.
En lien avec la première anomalie, celle-ci indique que lorsque l'on souhaite rajouter un enregistrement, il faut connaître toutes les informations relatives à cet enregistrement :
Id | Nom | Prénom | Date_naissance | Ville_naissance | Maire |
---|---|---|---|---|---|
1 | Durand | Jean-Pierre | 23/05/1985 | Paris | Anne Hidalgo |
2 | Dupont | Christophe | 15/12/1967 | Paris | Anne Hidalgo |
3 | Terta | Henry | 12/06/1978 | Nice | Christian Estrosi |
4 | Grimard | Aubin | 25/11/1986 | Marseille | ??? |
Si je veux ajouter un nouvel individu né à Marseille, je devrais connaître le maire de Marseille.
Il y a une anomalie dans l'ajout de ma donnée.
Quelques questions à se poser pour éviter le plus d'anomalies dans les tables :
- Si je supprime la ligne, vais-je perdre des informations ?
- Si je modifie la ligne, dois-je modifier ailleurs ?
- Si j’insère un enregistrement, dois-je connaitre toutes les valeurs ?
- Y-a-t-il des données déjà existantes dans ma table ?
Les réponses à ces questions permettent d'avoir des tables saines et garanties sans problèmes pour manipuler les données !