Bonjour,

je suis béotien en matière de SGBD , et je n'arrive pas à trouver la façon la plus maline d'organiser ma base, même si la question risque de paraitre triviale à beaucoup...

Pour organiser une base de données de morceaux de musique j'ai :
- 1 table MORCEAUX contenant les morceaux de musique
- 1 table ATTRIBUTS contenant des attributs (rock, orchestral, rapide...)


Je veux pouvoir attribuer un ou plusieurs attributs à chacun de mes morceaux de manière booléenne (un morceau est 'rock' ou ne l'est pas)

Je crée donc une 3eme table "Morceau_Attribut" pour lier les 2 tables
chaque ligne ressemblerait donc à "id_morceau ; id_attribut"
(chaque ligne associe un morceau à un attribut, ce qui permet d'associer plusieurs attributs à un morceau, ou réciproquement plusieurs morceaux à un attribut donné)

Jusque là tout va bien.

Je veux pouvoir filtre les morceaux avec plusieurs attributs. Mais c'est là que ça se complique, après avoir choisi le premier attribut, je veux éliminer dans ma liste d'attributs, ceux qui mènent à zéro solution.

Par exemple, si j'ai choisi "Rock" mais qu'aucun morceau "Rock" ne possède l'attribut "Tango", je veux éliminer le choix "Tango" de mon nouveaux choix d'attributs proposés.

Il y a bien sur une solution "bourrin", qui consiste à tester tous les attributs 1 par 1, et chercher s'il existe des morceaux ayant les 2 attributs, celui déjà choisi et celui à tester. et ainsi filtrer le choix des attributs restants à proposer. C'est un peu la technique du crash-test. Facile à programmer, mais pas très élégant.

Je me dis qu'il existe peut-être un moyen plus économe de procéder, ou peut-être que l'organisation de ma base n'est pas la bonne...

Bref, j'aimerais avoir l'avis d'un expert.

Par avance merci,