BDD (MySQL) organisation d'une table, help plz.
Fermé
Ruka
-
13 juil. 2013 à 16:13
js95 Messages postés 773 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 29 juillet 2014 - 16 juil. 2013 à 15:23
js95 Messages postés 773 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 29 juillet 2014 - 16 juil. 2013 à 15:23
A voir également:
- BDD (MySQL) organisation d'une table, help plz.
- Table ascii - Guide
- Table des matières word - Guide
- Mysql download - Télécharger - Bases de données
- Supprimer bdd phpmyadmin ✓ - Forum Logiciels
- Mysql error in file: /engine/classes/mysql.php at line 53 ✓ - Forum Réseaux sociaux
2 réponses
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
13 juil. 2013 à 16:29
13 juil. 2013 à 16:29
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...
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
14 juil. 2013 à 13:11
14 juil. 2013 à 13:11
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
Ruka Nizuka
Messages postés
70
Date d'inscription
dimanche 7 avril 2013
Statut
Membre
Dernière intervention
26 novembre 2016
14 juil. 2013 à 18:13
14 juil. 2013 à 18:13
Pas mal, pas mal. Merci beaucoup d'avoir pris le temps de m'aider.
Avec ce que j'ai sous la main, je vais essayer d'en sortir quelque chose puis si j'ai un soucis, je reviendrais poster.
Merci encore.
Avec ce que j'ai sous la main, je vais essayer d'en sortir quelque chose puis si j'ai un soucis, je reviendrais poster.
Merci encore.
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.
js95
Messages postés
773
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
353
16 juil. 2013 à 15:23
16 juil. 2013 à 15:23
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.
Modifié par js95 le 13/07/2013 à 16:40
13 juil. 2013 à 16:44
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 ?
13 juil. 2013 à 17:12
14 juil. 2013 à 12:43
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.