Bonjour,
Envoyé par
dredge4
Comment savoir de quel côté chercher (artiste seul ou groupe) ? Suis-je dans l'obligation de faire deux requêtes (jointure artiste/titre et jointure groupe/titre) et de trier ensuite selon les résultats donnés ?
Je propose une modélisation qui évite de se poser la question. Le MCD ci-dessous est présenté par morceaux qu'il faut reconstituer ensuite.
1. [ Titre ]--1,n----( Interprétation )----0,n--[ Artiste ]
L'interprétation est donc un couple {Titre, Artiste}.
2. ( Interprétation )--1,1----( )----0,n->[ TypeParticipation ]
Chaque interprétation a un type de participation Featuring, duo, guest star, etc. sans oublier Normal (ou principal, ou initial, etc.) pour les titres interprétés par un seul artiste (la plupart des cas, donc).
3. [ Individu ]====>[ Artiste ]
4. [ Groupe ]====>[ Artiste ]
Les artistes sont spécialisés en deux catégories : Individu et Groupe. Un individu (un artiste seul) est un artiste et un groupe est un artiste. Un individu n'est pas un groupe et réciproquement.
5. [ Individu ]--0,n----( Composition )----0,n--[ Groupe ]
Composition des groupes par des individus. Il n'est pas nécessaire de définir tous les membres d'un groupe dans Individu. Le Groupe est un artiste à part entière.
Le MLD dérivé de ce MCD contient donc 7 tables composées comme suit (clés soulignées) :
Titre (idTitre, ...)
Artiste (idArtiste, ...)
TypeParticipation (idTypeP, ...)
Interprétation (idTitre#, idArtiste#, idTypeP#)
Individu (idArtisteI#, ...) /* idArtisteI référence idArtiste dans Artiste
Groupe (idArtisteG#, ...) /* idArtisteG référence idArtiste dans Artiste
Composition (idArtisteG#, idArtisteI#, ...)
Attardons-nous sur les artistes. Si Johnny Hallyday est l'artiste a1 (idArtiste = a1) et The Beatles est l'artiste a2 nous avons :
1 2 3 4
|
Artiste Individu Groupe
a1 a1 <inexistant>
a2 <inexistant> a2 |
Une jointure (externe) effectuée sur Artiste, Individu et Groupe fournit les bonnes données dans les deux cas.
L'artiste a2 qui est un groupe a pu être créé sans créer ses membres. Mais rien n'interdit de créer un ou plusieurs membres d'un groupe s'il sont aussi artistes individuels. Ainsi pour l'artiste a3 John Lennon :
1 2 3 4 5 6 7 8 9
|
Artiste Individu Groupe
a1 a1 <inexistant>
a2 <inexistant> a2
a3 a3
Composition
idArtisteI idArtisteG
a3 a2 |
Normalement, on doit pouvoir gérer tous les cas. Quelques exemples :
Titre "Retiens la nuit" (t1)
Titre (t1, ...)
Interprétation (t1, a1, "Normal")
Duo Johnny / Lennon sur le titre "Retiens la nuit" (t2)
Titre (t2, ...)
Interprétation (t2, a1, "Normal")
Interprétation (t2, a3, "Guest")
Titre "She Loves You" (t3) featuring Johnny Hallyday
Titre (t3, ...)
Interprétation (t3, a2, "Normal")
Interprétation (t3, a1, "Featuring")
A tester...
Partager