Les bases de données
- Présentation -
En première, nous avons manipulé des données en tables, le plus souvent contenues dans des fichiers csv.
Cette structure de données, bien que pratique et facilitant l’échange de données entre utilisateurs, ne permet bien souvent pas de décrire facilement la complexité des relations existant entre différentes informations.
Dans le cas de données plus compliquées, on peut donc utiliser une base de données. Différents modèles existent mais le plus utilisé reste la base de données relationnelle. C’est ce modèle que nous allons étudier ci-dessous.
Seule, une base de données est assez inutile. On la couple souvent avec un Système de Gestion de la Base de Données (SGBD) qui permet d’interagir avec celle-ci en ajoutant des valeurs, cherchant des données… On pourra retenir les exemples suivants :
Une base de données relationnelle est construite à l’aide de relations que l’on appelle communément des tables. Voici par exemple une table eleves
:
id | nom | prenom | naissance | classe |
---|---|---|---|---|
1 | Durand | Marie | 03/03/03 | Term-1 |
2 | Ergand | Renaud | 25/04/03 | Term-2 |
3 | Simon | Caroline | 03/06/03 | Term-1 |
On peut le voir : une relation est en réalité un tableau à double-entrée.
Lorsqu’on définit un attribut, on précise son type : cela permet de préciser quelles sont les valeurs possibles. Par exemple lorsque l’utilisateur ajoute des données, le SGBD vérifie que celles-ci correspondent bien aux types indiqués.
Dans le cas de l’exemple précédent, les types sont :
Par principe, une table ne peut pas contenir deux lignes parfaitement identiques. L’exemple ci-dessous sera refusé par le SGBD :
id | nom | prenom | naissance | classe |
---|---|---|---|---|
1 | Durand | Marie | 03/03/03 | Term-1 |
2 | Ergand | Renaud | 25/04/03 | Term-2 |
3 | Simon | Caroline | 03/06/03 | Term-1 |
3 | Simon | Caroline | 03/06/03 | Term-1 |
On pourrait toutefois imaginer que deux élèves de même nom, prénom, nés le même jour soient dans la même classe (si, si, c’est possible !). Dans ce cas comment gérer notre table ?
Il sera possible de les distinguer en utilisant leur id
: cette valeur numérique est unique pour chaque ligne : deux lignes ne peuvent avoir le même id
.
Le plus souvent on va même jusqu’à préciser que l’id
est la clé primaire (PRIMARY KEY
dans les SGBD) de notre table :
(niveau, numéro)
permet de définir sans ambiguïté une classe du lycée. Ainsi (T, 3)
décrit la “Terminale 3” alors que (1, 3)
la “Première 3”Complétons la table précédente en ajoutant les professeurs principaux :
id | nom | prenom | naissance | classe | prof_principal |
---|---|---|---|---|---|
1 | Durand | Marie | 03/03/03 | Term-1 | M. Ayrault |
2 | Ergand | Renaud | 25/04/03 | Term-2 | M. Beyrault |
3 | Simon | Caroline | 03/06/03 | Term-1 | M. Ayrault |
Nous obtenons une nouvelle table valide mais contenant des répétitions : est-il vraiment utile de préciser pour chaque élève que M. Ayrault est le professeur principal de la Terminale 1 ?
Il serait plus judicieux de créer une seconde table classes
:
id | classe | prof_principal |
---|---|---|
1 | Term-1 | M. Ayrault |
2 | Term-2 | M. Beyrault |
On le voit, dans cette seconde table, une ligne correspond à une classe et le nom du professeur principal n’est alors indiqué qu’une seule fois.
Ici aussi l’attribut id
sert de clé primaire.
Remarque : On peut s’interroger sur le nom des attributs : est-ce que le SGBD ne va pas confondre les deux colonnes id
? Non, à condition d’être explicite en précisant eleves.id
ou classes.id
selon que l’on souhaite parler de l’un ou l’autre.
On peut donc utiliser l’id
de la classe dans la première table :
id | nom | prenom | naissance | classe |
---|---|---|---|---|
1 | Durand | Marie | 03/03/03 | 1 |
2 | Ergand | Renaud | 25/04/03 | 2 |
3 | Simon | Caroline | 03/06/03 | 1 |
Comment le SGBD va-t’il savoir que la classe 1 de la table eleves
est la 1 de la table classes
? On utilise une clé externe (FOREIGN KEY
) : la clé externe de l’attribut eleves.classe
est classes.id
. On indique ainsi que la valeur de la colonne classe
de la table eleves
correspond à l’id
de la tables classes
.
Remarque : un élève appartient à une classe mais une classe compte plusieurs élèves. On parle de relation un pour plusieurs. On peut aussi imaginer des relations un pour un : un élève a une place précise dans le plan de classe et une place correspond à un élève unique.
Travailler avec une base de données, créer une base de données nécessitent donc de bien comprendre sa structure, les relations entre les différentes tables et attributs.
Cette structure peut être décrite facilement à l’aide du modèle de données ou schéma. Voici par exemple un schéma représentant la base de donnée d’un lycée :
Sur ce schéma on peut voir qu’il existe cinq tables liées les unes avec les autres.
Ainsi un élève :
eleves.classe
et classes.id
)eleves.spe_1
et cours.id
)Les cours (qui correspondent ici à des groupes d’une matière) sont associés :
cours.matiere = matieres.id
)cours.professeur = professeurs.id
)Les 1
et les *
sur les relations entre les tables indiquent le type de relation :
1
indique que cet attribut correspond à une unique entrée dans l’autre table (un élève est dans une classe)*
permet de dire que cet attribut peut se retrouver plusieurs fois (une classe comporte plusieurs élèves)Remarque : On trouve souvent le symbole \(\infty\) à la place de *
dans les schémas.