188 Chapitre 4. Création d’une base MySQL Un type d’entité, comprenant les éléments ci-dessus, décrit toutes les entités d’un même ensemble. On représente ce type graphiquement comme sur la figure 4.2 qui donne l’exemple de deux entités, Internaute et Film. Nom de l’entité Clé Film mot de passe année de naissance nom email Internaute Attributs Attributs année genre résumé titre prénom Figure 4.2 — Représentation des entités Choix de l’identifiant Dans le premier cas, on a décidé qu’un internaute était identifié par son email, ce qui est cohérent pour une application web. Il est en fait très rare de trouver un attribut d’une entité pouvant jouer le rôle d’identifiant. Le choix du titre pour identifier un film serait par exemple beaucoup plus discutable. En ce qui concerne les artistes, acteurs ou réalisateurs, l’identification par le nom seul paraît vraiment impossible. On pourrait penser à utiliser la paire (nom,pr´enom), mais l’utilisation d’identifiants composés de plusieurs attributs, quoique possible, peut poser des problèmes de per- formance et complique les manipulations par SQL. Dans la situation, fréquente, où on a du mal à déterminer quelle est la clé d’une entité, on crée un identifiant « abstrait » indépendant de tout autre attribut. Pour les artistes, nous avons ajouté id, un numéro séquentiel qui sera incrémenté au fur et à mesure des insertions. Ce choix est souvent le meilleur, dès lors qu’un attribut ne s’impose pas de manière évidente comme clé. Associations La représentation (et le stockage) d’entités indépendantes les unes des autres est de peu d’utilité. On va maintenant décrire les associations entre des ensembles d’entités. Une bonne manière de comprendre comment on doit représenter une association entre des ensembles d’entités est de faire un graphe illustrant quelques exemples, les plus généraux possibles. Prenons le cas de l’association représentant le fait qu’un réalisateur met en scène des films. Sur le graphe de la figure 4.3 on remarque que : 1. certains réalisateurs mettent en scène plusieurs films ; 2. inversement, un film est mis en scène par au plus un réalisateur. La recherche des situations les plus générales possibles vise à s’assurer que les deux caractéristiques ci-dessus sont vraies dans tout les cas. Bien entendu on peut trouver 4.1 Conception de la base 189 1% des cas où un film a plusieurs réalisateurs, mais la question se pose alors : doit-on modifier la structure de notre base, pour 1% des cas. Ici, on a décidé que non. Psychose Vertigo ImpitoyableAlfred Hitchcock Clint Eastwood Les réalisateurs Les liens "Réalise" Les films Figure 4.3 — Association entre deux ensembles. Ces caractéristiques sont essentielles dans la description d’une association. On les représente sur le schéma de la manière suivante : 1. si une entité A peut être liée à plusieurs entités B, on indique cette multiplicité par un point noir ( • ) à l’extrémité du lien allant de A vers B ; 2. si une entité A peut être liée à au plus une entité B, alors on indique cette unicité par un trait simple à l’extrémité du lien allant de A vers B ; Pour l’association entre Réalisateur et Film, cela donne le schéma de la figure 4.4. Cette association se lit Un réalisateur réalise un film, mais on pourrait tout aussi bien utiliser la forme passive avec comme intitulé de l’association Est réalisé par et une lecture Un film est réalisé par un réalisateur. Le seul critère à privilégier dans ce choix des termes est la clarté de la représentation. Film Réalise Réalisateur titre année genre résuméannée naiss. id prénom nom Figure 4.4 — Représentation de l’association. Prenons maintenant l’exemple de l’association (Acteur,Film) représentant le fait qu’un acteur joue dans un film. Un graphe basé sur quelques exemples est donné dans la figure 4.5. On constate tout d’abord qu’un acteur peut jouer dans plusieurs films, et que dans un film on trouve plusieurs acteurs. Mieux : Clint Eastwood, qui apparaissait déjà en tant que metteur en scène, est maintenant également acteur, et dans le même film. 190 Chapitre 4. Création d’une base MySQL Clint Eastwood Les filmsLes acteurs Les liens "Joue" Inspecteur Harry Impitoyable Ennemi d’état Gene Hackman Figure 4.5 — Association (Acteur,Film) Cette dernière constatation mène à la conclusion qu’il vaut mieux regrouper les acteurs et les réalisateurs dans un même ensemble, désigné par le terme plus général « Artiste ». On obtient le schéma de la figure 4.6, avec les deux associations représentant les deux types de lien possible entre un artiste et un film : il peut jouer dans le film, ou le réaliser. Ce « ou » n’est pas exclusif : Eastwood joue dans Impitoyable, qu’il a aussi réalisé. Film Réalise Joue Artiste rôle titre année genre résuméannée naiss. id prénom nom Figure 4.6 — Associations entre Artiste et Film. Dans le cas d’associations avec des cardinalités multiples de chaque côté, certains attributs doivent être affectés qu’à l’association elle-même. Par exemple, l’association Joue a pour attribut le rôle tenu par l’acteur dans le film (figure 4.6). Clairement, on ne peut associer cet attribut ni à Acteur puisqu’il a autant de valeurs possibles qu’il y a de films dans lesquels cet acteur a joué, ni à Film, la réciproque étant vraie également. Seules les associations ayant des cardinalités multiples de chaque côté peuvent porter des attributs. Associations impliquant plus de deux entités On peut envisager des associations entre plus de deux entités, mais elles sont plus difficiles à comprendre, et la signification des cardinalités devient beaucoup plus ambiguë. Imaginons que l’on souhaite représenter dans la base de données les informations indiquant que tel film passe dans telle salle de cinéma à tel horaire. On peut être tenté de représenter cette information en ajoutant des entités Salle et Horaire,eten créant une association ternaire comme celle de la figure 4.7. 4.1 Conception de la base 191 Avec un peu de réflexion, on décide que plusieurs films peuvent passer au même horaire (mais pas dans la même salle !), qu’un film est vu à plusieurs horaires diffé- rents, et que plusieurs films passent dans la même salle (mais pas au même horaire !). D’où les cardinalités multiples pour chaque lien. On peut affecter des attributs à cette association, comme par exemple le tarif, qui dépend à la fois de l’horaire, du film et de la salle. Horaire id heure début id nom adresse Salle tarif Film titre année genre résumé heure fin Figure 4.7 — Association ternaire. Ces associations avec plusieurs entités sont assez difficiles à interpréter, et elle offrent beaucoup de liberté sur la représentation des données, ce qui n’est pas toujours souhaitable. On ne sait pas par exemple interdire que deux films passent dans la même salle au même horaire. Le graphe de la figure 4.8 montre que cette configuration est tout à fait autorisée. Les salles 14-16 16-18 Impitoyable Vertigo Salle 1 Salle 2 Les horaires Les films Figure 4.8 — Graphe d’une association ternaire. Les associations autres que binaires sont donc à éviter dans la mesure du possible. Il est toujours possible de remplacer une telle association par une entité. Sur l’exemple précédent, on peut tout simplement remplacer l’association 192 Chapitre 4. Création d’une base MySQL ternaire par une entité Séance, qui est liée, par des associations binaires, aux trois entités existantes (voir figure 4.9). Il est préférable d’avoir plus d’entités et moins d’associations complexes, car cela rend l’interprétation du schéma plus facile. Dans le cas de la séance, au lieu de considérer simultanément trois entités et une association, on peut prendre maintenant séparément trois paires d’entités, chaque paire étant liée par une association binaire. Horaire id heure début id Séance tarif Film titre année genre résumé id nom adresse Salle heure fin Figure 4.9 — Transformation d’une association ternaire en entité. Récapitulatif En résumé, la méthode basée sur les graphiques Entité/Association est simple et pratique. Elle n’est malheureusement pas infaillible, et repose sur une certaine expé- rience. Le principal inconvénient est qu’il n’y a pas de règle absolue pour déterminer ce qui est entité, attribut ou association, comme le montre l’exemple précédent où une association s’est transformée en entité. À chaque moment de la conception d’une base, il faut se poser des questions auxquelles on répond en se basant sur quelques principes de bon sens : 1. rester le plus simple possible ; 2. éviter les associations compliquées ; 3. ne pas représenter plusieurs fois la même chose ; 4. ne pas mélanger dans une même entité des concepts différents. Voici quelques exemples de questions légitimes, et de réponses qui paraissent raison- nables. « Est-il préférable de représenter le metteur en scène comme un attribut de Film ou comme une association avec Artiste ? » . associations ayant des cardinalités multiples de chaque côté peuvent porter des attributs. Associations impliquant plus de deux entités On peut envisager des associations entre plus de deux entités,. telle salle de cinéma à tel horaire. On peut être tenté de représenter cette information en ajoutant des entités Salle et Horaire,eten créant une association ternaire comme celle de la figure. Internaute et Film. Nom de l’entité Clé Film mot de passe année de naissance nom email Internaute Attributs Attributs année genre résumé titre prénom Figure 4.2 — Représentation des entités Choix de