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.
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.
| 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 | |
| … |
| Nom | Prénom | Naissance |
|---|---|---|
| Menjou | Adolph | 1925 |
| Swayze | Patrick | 1971 |
| … | … | … |
Chacune de ses tables liste des entités :
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.
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.
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.
Vous pouvez voir des 0,n ici et là. Ce sont des cardinalités.
0,n se comprend par : un même film peut être lié à plusieurs acteurs (n) ou éventuellement aucun (0),0,n se comprend par : un même acteur peut être lié à plusieurs films (n) ou éventuellement aucun (0)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.
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.
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.
Elles sont indiquées en souligné.
On voit donc qu'il ne peut pas y avoir deux items de JOUE DANS associé à une même paire film – acteur.
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 souhaite placez les pays dans une entité à part.
À faire : Faites les modifications.
Une base de donnée concerne le trafic aérien. On y trouve :
À faire : Faites le diagramme entités / associations pour cette base de données.
Réfléchissez bien à la cardinalité des associations.
Une base de donnée concerne l'utilisation des livres d'une bibliothèque.
À faire : Faites le diagramme entités / associations pour cette base de données.
Réfléchissez bien à la cardinalité des associations.