BDD (MySQL) organisation d'une table, help plz.
Ruka
-
js95 Messages postés 773 Date d'inscription Statut Membre Dernière intervention -
js95 Messages postés 773 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Le titre n'est pas clair, je vais m'expliquer ici.
Alors je suis en train de créer un site sur la musique, il montrera tous les albums de chaque artiste avec toutes les pistes de l'album.
Les albums, je les affiche avec un tableau.
Ce que je n'arrive pas à faire, c'est pas quelque chose de compliqué, c'est juste de l'organisation.
+-----------------------------------+
Ma table ALBUM comporte:
- num_piste
- nom_artiste
- nom_album
+-----------------------------------+
Et j'aimerais pouvoir afficher chaque piste de l'album aussi, mais j'préfère évité de mettre plusieurs champs : piste1, piste2, piste3,... pistes11 dans la table ALBUM.
Existe t-il un moyen de faire comme tel :
+-----------------------------------+
Ma table ALBUM comporte:
- num_piste
- nom_artiste
- nom_album
- pistes_album (TEXT)
+-----------------------------------+
J'ajoute le champs "pistes_album" pour inclure toutes les pistes de l'album. Puis, dans ma page PHP, faire un système pour qu'il prenne chaque piste et le mettre entre chaque cellule "<td>" et "</td>" du tableau.
Si quelqu'un me trouve une solution, ça me ferait gagner beaucoup de temps car coder plusieurs tableau à la main, c'est lonnnnng !!!
Je compte faire une boucle pour afficher chaque piste si vous trouvez une solution.
Merci bien :)
Le titre n'est pas clair, je vais m'expliquer ici.
Alors je suis en train de créer un site sur la musique, il montrera tous les albums de chaque artiste avec toutes les pistes de l'album.
Les albums, je les affiche avec un tableau.
Ce que je n'arrive pas à faire, c'est pas quelque chose de compliqué, c'est juste de l'organisation.
+-----------------------------------+
Ma table ALBUM comporte:
- num_piste
- nom_artiste
- nom_album
+-----------------------------------+
Et j'aimerais pouvoir afficher chaque piste de l'album aussi, mais j'préfère évité de mettre plusieurs champs : piste1, piste2, piste3,... pistes11 dans la table ALBUM.
Existe t-il un moyen de faire comme tel :
+-----------------------------------+
Ma table ALBUM comporte:
- num_piste
- nom_artiste
- nom_album
- pistes_album (TEXT)
+-----------------------------------+
J'ajoute le champs "pistes_album" pour inclure toutes les pistes de l'album. Puis, dans ma page PHP, faire un système pour qu'il prenne chaque piste et le mettre entre chaque cellule "<td>" et "</td>" du tableau.
Si quelqu'un me trouve une solution, ça me ferait gagner beaucoup de temps car coder plusieurs tableau à la main, c'est lonnnnng !!!
Je compte faire une boucle pour afficher chaque piste si vous trouvez une solution.
Merci bien :)
A voir également:
- BDD (MySQL) organisation d'une table, help plz.
- Table ascii - Guide
- Table des matières word - Guide
- Mysql community server - Télécharger - Bases de données
- Table des caractères - Guide
- Impossible de coller les données de votre organisation ici. - Forum Incredimail
2 réponses
Non, je pense que c'est une mauvaise idée de mettre les titres des pistes dans un champ.
Voilà comment je vois la base :
Table ARTISTE
- id_artiste : int, clé primaire
- nom_artiste : varchar
- on ajoute un champ supplémentaire pour chaque info sur l'artiste qu'on veut stocker
Table ALBUM
- id_album : int, clé primaire
- num_artiste : int, doit correspondre à l'id de l'artiste dans la table précédente (clé étrangère)
- nom_album : varchar
- on ajoute un champ supplémentaire pour chaque info sur l'album qu'on veut stocker
Table PISTE
- num_piste : int, le même numéro que sur le cd
- num_album : int, doit correspondre à l'id de l'album dans la table précédente (clé étrangère)
- titre : varchar
- on ajoute un champ supplémentaire pour chaque info qu'on veut stocker pour une piste
La clé primaire de cette dernière table est sur l'union des attributs num_piste et num_album, c'est-à-dire qu'une piste est identifiée par son album et son numéro dans l'album, reporte-toi à la documentation de ton SGBD pour trouver le code à écrire pour déclarer cette clé primaire.
En espérant que tu y vois plus clair...
Voilà comment je vois la base :
Table ARTISTE
- id_artiste : int, clé primaire
- nom_artiste : varchar
- on ajoute un champ supplémentaire pour chaque info sur l'artiste qu'on veut stocker
Table ALBUM
- id_album : int, clé primaire
- num_artiste : int, doit correspondre à l'id de l'artiste dans la table précédente (clé étrangère)
- nom_album : varchar
- on ajoute un champ supplémentaire pour chaque info sur l'album qu'on veut stocker
Table PISTE
- num_piste : int, le même numéro que sur le cd
- num_album : int, doit correspondre à l'id de l'album dans la table précédente (clé étrangère)
- titre : varchar
- on ajoute un champ supplémentaire pour chaque info qu'on veut stocker pour une piste
La clé primaire de cette dernière table est sur l'union des attributs num_piste et num_album, c'est-à-dire qu'une piste est identifiée par son album et son numéro dans l'album, reporte-toi à la documentation de ton SGBD pour trouver le code à écrire pour déclarer cette clé primaire.
En espérant que tu y vois plus clair...
Si ça peut t'aider, voici deux méthodes pour l'affichage que tu souhaites obtenir.
La première est plus coûteuse pour le SGBD, mais moins pour la programmation.
La seconde est peu coûteuse pour le SGBD, mais nécessite plus de lignes de code.
Si tu utilises PHP/MySQL, je te recommande la deuxième car MySQL a tendance à ramer quand les requêtes deviennent conséquentes, bien qu'ici la première requête devrait passer (il n'y a que deux jointures).
La première est plus coûteuse pour le SGBD, mais moins pour la programmation.
La seconde est peu coûteuse pour le SGBD, mais nécessite plus de lignes de code.
Si tu utilises PHP/MySQL, je te recommande la deuxième car MySQL a tendance à ramer quand les requêtes deviennent conséquentes, bien qu'ici la première requête devrait passer (il n'y a que deux jointures).
-- Requête pour afficher les albums d'un artiste SELECT nom_album, num_piste, titre FROM piste INNER JOIN album ON album.id_album=piste.num_album INNER JOIN artiste ON id_artiste=num_artiste WHERE nom_artiste='Michel Sardou' ORDER BY nom_album, num_piste; -- le résultat contient alors toutes les données à afficher -- autre méthode avec plusieurs requêtes -- etape1 : on récupère les albums SELECT id_album, nom_album FROM album INNER JOIN artiste ON id_artiste=num_artiste WHERE nom_artiste='Michel Sardou' ORDER BY nom_album; -- on passe en revue chaque résultat (un par un) dans une boucle -- on affiche le nom de l'album -- etape2 : on récupère les pistes de l'album courant SELECT num_piste, titre FROM piste WHERE num_album=? ORDER BY num_piste; -- en remplaçant ? par l'id de l'album courant (récupéré à l'étape 1), en prenant soin de faire une requête préparée afin de prévenir le risque d'injection SQL -- on fait une autre boucle pour afficher les pistes -- fin de la grande boucle
seul problème, le système d'information pourra pas gérer les noms des musiciens d'un groupe.
Pour ça il faudra remplacer nom d'artiste par nom de groupe et faire une nouvelle table facultative qui permet de stocker pour chaque groupe quel artiste la compose et en y mettant un champ année début, année départ(qui peut être nul si le musicien est toujours dans le groupe) et éventuellement un champ de l'instrument/rôle de l'interprète.
Sinon la proposition de js95 est très bien mais ça m'a semblé utile à signaler.
Pour ça il faudra remplacer nom d'artiste par nom de groupe et faire une nouvelle table facultative qui permet de stocker pour chaque groupe quel artiste la compose et en y mettant un champ année début, année départ(qui peut être nul si le musicien est toujours dans le groupe) et éventuellement un champ de l'instrument/rôle de l'interprète.
Sinon la proposition de js95 est très bien mais ça m'a semblé utile à signaler.
En effet, je n'ai pas envisagé ce cas, un album pouvant alors être affiché sur la page de différents artistes.
Le problème peut même encore se complexifier selon les informations que l'on souhaite stocker pour les pistes.
En effet, un artiste peut être impliqué seulement sur quelques pistes d'un album, plusieurs artistes peuvent être auteurs/chanteurs/compositeurs d'une même piste...
La majorité des albums ont ces particularités...
Tout dépend de ce qu'on veut vraiment afficher sur la page de chaque artiste.
Le problème peut même encore se complexifier selon les informations que l'on souhaite stocker pour les pistes.
En effet, un artiste peut être impliqué seulement sur quelques pistes d'un album, plusieurs artistes peuvent être auteurs/chanteurs/compositeurs d'une même piste...
La majorité des albums ont ces particularités...
Tout dépend de ce qu'on veut vraiment afficher sur la page de chaque artiste.
Ca me semble pas si mal, par contre à votre avis, je suis obligé de créer une table PISTE ?
J'avais pensé à créer une table ALBUM, mais si je dois créer une table PISTE ça va me prendre un siècle pour terminer mon site ^^'
Bon ok, je vais faire avec. Maintenant pour afficher chaque piste entre les cellules <td> et </td>, il me suffit de mettre "$titre" et c'est bon ?
Oui, cette table est indispensable, un album ayant un nombre de pistes variable, pour afficher les pistes d'un album on peut ainsi facilement récupérer le nombre de pistes.
En revanche, si pour chaque artiste tu as très peu d'albums, tu peux éventuellement te passer de la table artiste et mettre le nom de l'artiste dans chaque album, mais en faisant attention qu'un même artiste soit toujours écrit de la même façon, de sorte à pouvoir opérer une sélection d'albums d'un même artiste.
> pour afficher chaque piste entre les cellules <td> et </td>, il me suffit de mettre "$titre" et c'est bon ?
Là ça dépend du langage de programmation que tu utilises. Je peux t'aider si tu utilises PHP.