IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Pb Discographie (lien artistes + chansons)


Sujet :

Schéma

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Pb Discographie (lien artistes + chansons)
    Bonjour à tous,

    Généralement plutôt débrouillard lorsqu'il faut créer une BDD, je bloque actuellement sur un problème de modélisation de discographie, et plus précisément sur la gestion de "l'entité artistique" qui joue/interprète une chanson.
    Vous me direz que c'est un sujet souvent traité dans les différents forums. Mais malheureusement je n'ai jamais trouvé nul part une solution qui réponde à toutes mes contraintes.

    On trouve en effet souvent des versions qui satisfont au fait qu'une chanson peut être joué soit par un artiste solo, soit un groupe (regroupement d'artistes). Mais de mon côté, j'aurais besoin de gérer aussi les contraintes suivantes :
    - Un artiste qui collabore exceptionnellement avec un groupe ou un artiste ("Featuring")
    - Deux groupes qui décident de concevoir et jouer une chanson ensemble.

    Vous trouverez sur l'image ci-dessous mes deux modélisations tests les plus abouties. Le problème, c'est qu'elle ne me permettent pas de gérer toutes les possibilités que je veux offrir.




    TEST DE GAUCHE
    Les + :
    -> La partie "EntiteArtistique" + "collabore" me permet de générer en amont les artistes solos ou groupe dans une seule et même table.
    -> L'association "EntiteArtistique" + "interprete" me permet de gérer les cas spéciaux, comme deux groupes participant ensemble.

    Les - :
    -> Mon gros souci, c'est que les attributs nécessaires à définir un Groupe ou un Artiste solo sont trop différents pour que les deux soit stockés dans "EntiteArtistique".
    -> La table "interprete" va faire 95% du temps redondance avec "EntiteArtistique"

    TEST DE DROITE
    Les + :
    -> Permet de gérer plus logiquement les groupes ou les artistes.

    Les - :
    -> Ne permet pas de créer des collaborations entre deux groupes ou un Groupe + un individu/artiste solo.
    -> Même en créant un attribut de "redirection" dans Artiste (expliquant que l'id correspond a un groupe ou un individu), j'ai peur que l'info soit difficile à récupérer.

    Merci d'avance aux experts de la modélisation pour m'aider à y voir plus clair !

    Bon week end!

  2. #2
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Bonjour,

    Je crois qu'il faut bien séparer les groupes, des artistes. Ce sont deux choses bien différentes.
    Un groupe est composé de plusieurs artistes (chacun pouvant avoir une carrière solo).

    Donc il faut pour chaque titre d'un album, connaître les artistes et/ou groupes qui ont pu y participer (et de quelle manière).
    J'utiliserais une entité contenant les types de participations (Featuring, duo, guest star, etc) et deux associations entre les entités Artiste, Groupe, et Titre.

    Ça ressemblerai à ceci:

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci Oishiiii pour la rapidité de votre réponse.

    Votre schéma semble gérer tous les cas de figure que je peux rencontrer. Ma seule inquiétude vient de la récupération des interprètes quand on part de la table "titre".
    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 ?

    En vous remerciant d'avance !

  4. #4
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour,

    Citation Envoyé par dredge4 Voir le message
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    JPhi33

    J'ai fais quelques tests et cette logique permet effectivement de gérer tous les cas de figure un peu alambiqués.

    Je pense adopter cette architecture pour cette partie de ma bdd, si tu me concède bien sûr les droits d'auteur ainsi que les royalties de tous les énormes gains que je vais amasser (qui se montent à pleins de 0 après la virgule)

    Un grand merci à toi, tu viens de me "sauver ma vie"

  6. #6
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour dredge4,

    Si besoin, le modèle peut être complété de la manière suivante :

    [ Artiste ]--1,1----( )----0,n->[ TypeArtiste ]

    La table correspondant à l'entité TypeArtiste contient simplement les deux types d'artistes que sont Individu et Groupe, ce qui permet de savoir dans quelle table aller rechercher le reste des données.

    TypeArtiste(idTypeArtiste, LibelléTypeArtiste)
    Artiste(idArtiste, ..., idTypeArtiste#)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    idTypeArtiste LibelléTypeArtiste
    I             Individu
    G             Groupe
    Pour une ligne de la table Artiste :
    - si idTypeArtiste = "I", alors le reste des données est à récupérer dans la table Individu
    - si idTypeArtiste = "G", alors le reste des données est à récupérer dans la table Groupe

    Dans certains cas, il sera peut être plus intéressant d'utiliser cette méthode alors que dans d'autres cas, la méthode des jointures externes (exposée dans mon précédent message) sera meilleure.

    Citation Envoyé par dredge4 Voir le message
    Je pense adopter cette architecture pour cette partie de ma bdd, si tu me concède bien sûr les droits d'auteur ainsi que les royalties de tous les énormes gains que je vais amasser (qui se montent à pleins de 0 après la virgule)
    Je te laisse les 0 après la virgule, je prends ceux qui sont avant

    Citation Envoyé par dredge4 Voir le message
    Un grand merci à toi, tu viens de me "sauver ma vie"
    Bon courage pour la suite.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

Discussions similaires

  1. [FLASH 5] Comment créer un lien hypertexte
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 30/03/2006, 12h26
  2. [Kylix] pb avec lien symbolique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h16
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  4. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo