Table des matières
Base de données relationnelles
Fiche à imprimer, pour ce cours et le précédent
Il existe plusieurs modèles de base de données. Nous allons étudier le modèle relationnel qui domine de loin.
Le modèle relationnel est mis au point par Edgar Franck Codd en 1970.
Tables
Une BdD relationnelle est constituée de relations – on dit souvent tables au lieu de relations – qui sont comme nos fichiers .csv.
Reprenons l'exemple vu dans l'exercice. Nous avions deux tables correspondant à deux fichiers, films.csv et actors.csv.
table FILMS
| Réalisateur | Titre | Titre français | Année | … |
|---|---|---|---|---|
| ALLEN Lewis | Unseen | Invisible meurtrier | 1944 | |
| ALTMAN Robert | Thieves like us | Nous sommes tous des voleurs | 1974 | |
| … |
table ACTEURS
| Nom | Prénom | Naissance |
|---|---|---|
| Menjou | Adolph | 1925 |
| Swayze | Patrick | 1971 |
| … | … | … |
Chacune de ses tables liste des entités :
- 1 ligne = 1 film dans le premier,
- 1 ligne = 1 acteur dans le second.
En l'état, dans le fichier films.csv, chaque film contient une liste d'acteurs ce qui est une mauvaise façon de procéder – problème de doublons et de cohérence.
Il est préférable de traiter à part ce lien entre les deux tables. On parle d'association.
Représentation graphique des entités / associations
Utilisation d'un outil graphique : Mocodo
Allez sur le site Mocodo qui permet de représenter graphiquement l'organisation d'une base de données.
Notre but n'est pas d'apprendre les subtilités de Mocodo. Nous utilisons l'outil parce qu'il est facile à prendre en main et produit de bonnes illustrations. Je ne demanderai jamais en devoir de faire un diagramme Mocodo.
À faire :Faites un copier-coller du code suivant dans Mocodo et visualisez le graphique produit.
% Films - acteurs - tout ce qui suit % est un commentaire FILM:Titre original, Réalisateur, Titre français, année, Couleur/NB, Année, Pays JOUE DANS, 0n> FILM, 0n ACTEUR ACTEUR:Nom Prénom, année naissance
Dans ce graphique, les cadres FILM et ACTEUR sont des entités et JOUE DANS est une association.
FILM et ACTEUR donnent lieu chacun à une table. Nous verrons ensuite que l'association JOUE DANS nécessite également une table. Cela correspond à extraire de films.csv les liens vers les acteurs et à les placer dans un fichier à part.
Clés primaires
Dans le diagramme précédent, certains éléments sont soulignés. Ce sont les clés primaires. Dans une table, une valeur de clé primaire est unique.
Par exemple le titre original d'un film est sa clé primaire. Cela veut dire que le film est identifié de façon unique par son titre original ou dit autrement qu'il ne peut pas y avoir deux films avec le même titre original. C'est un problème !
À faire : Faites un copier-coller du code suivant dans Mocodo et constatez la différence.
% Films - acteurs avec identifiants FILM:Id Film, Titre original, Réalisateur, Titre français, année, Couleur/NB, Année, Pays JOUE DANS, 0n> FILM, 0n ACTEUR ACTEUR: Id Acteur, Nom, Prénom, année naissance
Dans ce graphique, la pointe de la flèche ne sert qu'à dire dans quel sens il faut comprendre la déclaration JOUE DANS. S'il n'y a pas d'ambiguïté et on pourrait supprimer la pointe de flèche qui n'aura de toute façon aucun effet dans l'organisation de la base de données.
Cardinalité
Vous pouvez voir des 0,n ici et là. Ce sont des cardinalités.
- À gauche, côté FILM,
0,nse comprend par : un même film peut être lié à plusieurs acteurs (n) ou éventuellement aucun (0), - À droite, côté ACTEUR,
0,nse comprend par : un même acteur peut être lié à plusieurs films (n) ou éventuellement aucun (0)
Attributs dans une association
Une association peut être plus qu'un simple lien, elle peut contenir des attributs. Par exemple, quand un acteur joue dans un film, il a un rôle et un temps d'apparition à l'écran. Ces deux attributs sont liés à l'association FILM - ACTEUR.
À faire : Faites un copier-coller du code suivant dans Mocodo et constatez la différence.
% Films - acteurs avec attribut dans l'association FILM:Id Film, Titre original, Réalisateur, Titre français, année, Couleur/NB, Année, Pays JOUE DANS, 0n> FILM, 0n ACTEUR:Temps d'apparition, Rôle ACTEUR: Id Acteur, Nom, Prénom, année naissance
Cela n'est pas évident ici, mais en l'état une association est liée à une paire (Id Film, Id Acteur) de sorte qu'il ne sera pas possible de lié plusieurs fois un même acteur à un même film – acteur jouant différents rôles. Il faudra modifier un peu l'organisation si on veut que ce soit possible.
Exercice : ajout d'une entité RÉALISATEUR
On souhaite consacrer une table pour les informations concernant les réalisateurs.
À faire : Dessinez un schéma représentant cette nouvelle situation.
Pour vous aider, une base à compléter sur Mocodo - notez que Réalisateur a été enlevé de FILM.
Le:dans le code ci-dessous sert à passer une colonne, chaque élément étant aligné sur une grille.
FILM:Id Film, Titre original, Titre français, année, Couleur/NB, Année, Pays JOUE DANS, 0n> FILM, 0n ACTEUR:Temps d'apparition, Rôle ACTEUR: Id Acteur, Nom, Prénom, année naissance : ASSO, 0n FILM, 0n TABLE TABLE:attribut 1, attribut 2
À faire : En réfléchissant, on se dit que les réalisateurs sont souvent des acteurs. Proposez une amélioration.
Tables
Sur Mocodo, vous pouvez voir une liste indiquant les tables correspondant à un graphique donné.
FILM ( Id Film, Titre original, Réalisateur, Titre français, année, Couleur/NB, Année, Pays )
JOUE DANS ( Id Film, Id Acteur, Temps d'apparition, Rôle )
ACTEUR ( Id Acteur, Nom, Prénom, année naissance )
Ce sont les tables nécessaires pour la base de données correspondant à ce diagramme entité - association. Il faut donc une table pour l'association JOUE DANS. C'est le cas quand les cardinalité sont en n des deux côtés.
Clé primaire
Elles sont indiquées en souligné.
- un item de FILM est identifié par Id Film
- un item de ACTEUR est identifié par Id Acteur
- un item de JOUE DANS est identifié par la paire (Id Film, Id Acteur)
On voit donc qu'il ne peut pas y avoir deux items de JOUE DANS associé à une même paire film – acteur.
Clé étrangère
Id Film est défini dans FILM ; Id Acteur est défini dans ACTEUR.
L'association JOUE DANS utilise Id Film et Id Acteur pour faire son lien mais ces attributs sont empruntés aux deux autres tables. On parle de clé étrangère.
Cette idée souligne la nécessité d'une cohérence :
- On ne peut pas créer une association JOUE DANS avec un Id Film inexistant dans FILM,
- on ne peut pas supprimer un film si son id est présent dans JOUE DANS.
Exercice : ajout d'une entité PAYS
On souhaite placez les pays dans une entité à part.
- Cette entité contiendra les attributs : Id Pays, Nom complet, Abréviation
- Chaque film et chaque artiste pourra être associé à 1 ou plusieurs pays.
À faire : Faites les modifications.
Exercice : trafic aérien
Une base de donnée concerne le trafic aérien. On y trouve :
- des avions : modèle, année de mise en service, compagnie propriétaire
- des compagnie aériennes : nom, chiffre d'affaire
- des aéroports : nom, pays, latitude, longitude
- des vols : nombre de passagers, avion, aéroport départ, date départ, aéroport d'arrivée, date arrivée
À faire : Faites le diagramme entités / associations pour cette base de données.
Réfléchissez bien à la cardinalité des associations.
Exercice : bibliothèque
Une base de donnée concerne l'utilisation des livres d'une bibliothèque.
- Les livres ont un titre, une année d'édition, un éditeur, un auteur, un résumé, un code ISBN ;
- Les auteurs ont un nom, prénom, une date de naissance, une biographie ;
- Les éditeurs ont un nom, un siège social, une adresse ;
- Les usagers de la bibliothèque ont un nom, prénom, numéro de téléphone, adresse postale, adresse mail
- Les usagers empruntent des livres. Ces emprunts ont une date d'emprunt et une date de retour s'ils ont été rendus.
À faire : Faites le diagramme entités / associations pour cette base de données.
Réfléchissez bien à la cardinalité des associations.
