Réalier une Base de donnée [Artiste original / Artiste Sample ]

Réalier une Base de donnée [Artiste original / Artiste Sample ] - SQL/NoSQL - Programmation

Marsh Posté le 12-07-2004 à 22:58:13    

Bonjour,
 
Je sais pas si je suis dans le bon forum .... on verra :p
 
Voila je voudrais faire une base de donnée qui contienent des références musicales concernant les samples des chansons !
 
Et faire des recherches en fonctions d'un titre de chansons (original ou Sample) ou d'un artiste.
 
Exemple :  
 
Original
Auteur : Charles Aznavour  
titre : Parce que tu crois
Album : ?
Année : ?
 
Reprise
Auteur : Eminem
titre : What's the diffrence
Album : ?
Année : ?
 
Les ? on s'en fout c'est juste un exemple de ce que je voudrais avoir.
 
Mon problème c'est qu'une chanson originale peut avoir été repirse plusieurs fois.... et je ne sais pas comment créer mes tables en fonctions de cette contrainte.
 
Si quelqu'un peut me filer un coup de main  
 
Merci

Reply

Marsh Posté le 12-07-2004 à 22:58:13   

Reply

Marsh Posté le 12-07-2004 à 23:04:54    

Tu fais une table "Chanson_Originale" et une table "Interpretation" qui est liée à la table "Chanson_Originale"


Message édité par mareek le 12-07-2004 à 23:05:11

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 23:06:28    

ben dans la table "reprise" tu colles une foreign key vers la table "original"...


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-07-2004 à 23:06:59    

mareek a écrit :

Tu fais une table "Chanson_Originale" et une table "Interpretation" qui est liée à la table "Chanson_Originale"

bah pq tu barres ? [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-07-2004 à 23:09:53    


parce qu'on duplique les donées inutilement.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 23:18:28    

C'est ce que je pensais aussi mais ca va pas fonctionner !
 
Car par exemple une Reprise peut contenir plusieurs Samples de chansons Originales, donc si je colle dans
la table "reprise" une foreign key vers la table "original"... ca entraine le fait d'avoir une seule référence vers une chanson originale !
 
J'y connais pas grand chose en SGBD .. donc je me plante peut-etre ?

Reply

Marsh Posté le 12-07-2004 à 23:20:25    

he ben tu fais une table de mapping


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-07-2004 à 23:23:08    

peemousse a écrit :

C'est ce que je pensais aussi mais ca va pas fonctionner !
 
Car par exemple une Reprise peut contenir plusieurs Samples de chansons Originales, donc si je colle dans
la table "reprise" une foreign key vers la table "original"... ca entraine le fait d'avoir une seule référence vers une chanson originale !
 
J'y connais pas grand chose en SGBD .. donc je me plante peut-etre ?


OK, j'avais pas vu ça comme ça.
 
Tu fais une table Chanson qui contient toutes tes chansons (originale ou repirse) et une table de relation entre la table chanson et la table chanson ([:ddr555]) avec un champ IDChansonOriginale et un champ IDChansonReprise.


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 12-07-2004 à 23:23:31    

Bon je crois que je vais aller me renseigner un peu sur les SGBD avnt de me lancer la dedans, parce que la ca dépasse mes pauvres compétences :)
 
Si tu peux m'expliquer rapidos en quoi ca consiste et commment je peux faire ca !
en attendans je vais googler pour voir un peu !
 
Merci en tout cas
 
EIDT: je parlais de la table de mapping !


Message édité par peemousse le 12-07-2004 à 23:24:13
Reply

Marsh Posté le 13-07-2004 à 02:26:47    

J'arrive a rien :/ je suis pas douée en Base de donnée.. si quelqu'un pouvait me donner un petit coup de pouce.

Reply

Marsh Posté le 13-07-2004 à 02:26:47   

Reply

Marsh Posté le 13-07-2004 à 02:28:24    

peemousse a écrit :

J'arrive a rien :/ je suis pas douée en Base de donnée.. si quelqu'un pouvait me donner un petit coup de pouce.


http://www.commentcamarche.net/bdd/bddintro.php3


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 02:41:40    

C'est vrai que vu commme ca ca fait un peu pleurnichard :)
Je vais essayer d'être un peu plus complet.
 
Je vais faire mon truc part étapes, ca va me permettre de maitriser un peu tout ca.
 
J'ai fait 3 tables :
 
Original qui contient :  
id    oartist    otitle    oalbum    oyear
 
Reprise qui contient :
id     saritist      stitle      salbum      syear
 
mappingqui contient :
 id      idOriginal      idReprise
 
donc dans ma logique (qui n'est pas une référence :p) je me dis Bon !
Dans cette table de mapping je vais faire correspondre les ID de mes chansons originales avec les ID de mes chansons reprises.
 
exemple:
 
IDoriginal = 1        IdReprise = 1
IDoriginal = 1        IdReprise = 2
 
C'est à dire que pour une chanson Original avec l'ID 1 il y a 2 chansons Reprises qui ont pour ID 1 et 2
 
Donc si je fais une recherche Par artiste original je "devrais" retourner idReprise 1 et 2 qui correspondent dans ma table Reprise à un artiste , un titre ....
 
Donc si je transcris ca en php ca doit ressembler à un truc comme ca :
 

Code :
  1. //je selectionne l'id de l'artiste recherchée
  2. $id= @mysql_query("SELECT id FROM original WHERE oartist ='$oartist'" );
  3. $data = mysql_fetch_array($id);
  4. $id=$data['id'];
  5. //je selectionne dans la table de mapping l'ID des chansons qui ont pour idOriginal l'id de l'artiste recherchée.
  6. $idReprise = "SELECT idReprise FROM mapping WHERE idOriginal = '$id'";
  7. $data = mysql_fetch_array($idReprise);
  8. $idReprise=$data['idReprise'];
  9. //je retourne de la table reprise l'intégralité des champs qui ont pour ID ce que j'ai recu dans la requete précedente !
  10. $result= @mysql_query("SELECT * FROM reprise WHERE id = '$idReprise'" );
  11. $data = mysql_fetch_array($result);
  12. while($data = mysql_fetch_array($result))
  13.     {
  14.     // on affiche les informations de l'enregistrements en cours
  15.    echo "Title : <span class='result'> " .$data["stitle"]." </span><br><br>
  16.   Author : <span class='result'> " .$data["sartist"]." </span><br><br>
  17.   Album : <span class='result'> " .$data["salbum"]." </span><br> <br>
  18.   Year : <span class='result'> " .$data["syear"]." </span><br><br>"; 
  19.     }


 
Hmmm est-ce que je suis completement à l'ouest dans mon raisonnement ?
 
Merci d'avoir lu jusqu'au bout !

Reply

Marsh Posté le 13-07-2004 à 02:50:14    

Ton raisonnement a l'air bon :jap:
 
Tu n'es pas obligé de séparer les reprises et les originales en 2 tables, tu peux mettre tout ça dans une seule table "Chanson".


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 03:26:13    

Ok merci ca me rassure ! :)
 
J'ai fait une base unique chanson.
 
Maintenant mon problème c'est du php je pense :/
 
Je récupère l'ID de la chanson originale pas de blem

Code :
  1. $id= @mysql_query("SELECT id FROM song WHERE artist ='$artist'" );
  2. $data = mysql_fetch_array($id);
  3. $id=$data['id'];


 
mais maintenant quand je veux récupérer les ID des reprises je sais pas comment faire parce que je ne sais pas à l'avance combien de chanson reprise il y a :
 

Code :
  1. $idReprise = "SELECT idReprise FROM mapping WHERE idOriginal = '$id'";
  2. $idReprise=mysql_query($idReprise);


 
donc pour ma requete suivante, celle qui va chercher dans la base chanson les reprises correspondantes pour les afficher
 

Code :
  1. $result= "SELECT * FROM reprise WHERE id = '$idReprise'";


 
Le problème se situe au niveau de '$idReprise' si je fais dans la requete précédente
 

Code :
  1. while($data = mysql_fetch_array($idReprise))
  2.     {
  3. //$data = mysql_fetch_array($result);
  4. $idReprise=$data['idReprise'];
  5. }


 
J'ai une erreur ! :/


Message édité par peemousse le 13-07-2004 à 03:27:11
Reply

Marsh Posté le 13-07-2004 à 04:03:33    

Je ne connais pas le PHP, je ne peux pas t'aider :/


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 09:19:08    

Le probleme c'est que tu affectes les données de ton résultat ($data['idReprise']) dans ta structure de résultat ($idReprise)
Du coup, quand tu arrives sur ton test dans la boucle while, tu penses tester le résultat de ta requete mais comme tu l'as re-affecté, ca fait une erreur.
--> Utilise une autre variable pour récupérer le résultat (les données, pas la structure).
 
Je suppose que $idReprise est le résultat renvoyé par la fonction mySql_query parce que la on ne la voit pas.
EDIT : ah tiens si c'était écrit plus haut...  :whistle:  
En fait je me demande pourquoi tu fais 2 requetes (1 pour récupérer les id des reprises, et une autre pour les infos des reprises)
Autant tout récupérer d'un coup non?


Message édité par hop le fou le 13-07-2004 à 09:23:05
Reply

Marsh Posté le 13-07-2004 à 09:26:35    

Code :
  1. //requête 1
  2. $sql="SELECT id FROM song WHERE artist='$artist';
  3. $req=mysql_query($sql);
  4. $data=mysql_fetch_array($req);
  5. $id=$data['id'];
  6. //requête 2
  7. $sql2="SELECT mapping.idOriginal, mapping.idReprise, Reprise.* ";
  8. $sql2.="FROM mapping, Reprise ";
  9. $sql2.="WHERE mapping.idOriginal=$id AND mapping.idReprise=Reprise.id";
  10. $req2=mysql_query($sql2);
  11. while($data2=mysql_fetch_array($req2))
  12. {
  13.   $idchansonreprise=$data2['id'];
  14.   ...
  15. }


Message édité par deliriumtremens le 13-07-2004 à 09:29:00
Reply

Marsh Posté le 13-07-2004 à 13:24:59    

:heink:
 
Arrêtez le délire tout de suite...
 
Une seule table suffit !
 
chanson
chanson_id
artiste
titre
album
annee
genre
reprise_id
 
 
Avec reprise_id FK with null pointant sur chanson_id
 
Dans ce champs, pour un original, tu mets vide.
Pour une reprise, tu mets l'id de la chason origonale.
 
Seule limitation :
-> Si une chanson est la reprise de plusieurs autres ça ne marchera pas. Ce cas existe, notamment une chanson française dont je ne me souvient jamais le titre, qui reprends 4 ou 5 grands titres des années 70.

Reply

Marsh Posté le 13-07-2004 à 13:27:31    

Si tu veux mapper les reprises de plusieurs originaux, il te suffit de faire deux tables uniquement. La table REPRISE et la table ORIGINAL sont une seule table !
On ne multiplie les tables que si fonctionnellement il y a une différence. Moi il faut qu'on m'explique quelle est la différence FONCTIONNELLE entre une reprise et un original... Les deux sont des chansons, point barre.
 
On vous apprends quoi en cours d'analyse ?

Reply

Marsh Posté le 13-07-2004 à 13:40:12    

Arjuna a écrit :


On vous apprends quoi en cours d'analyse ?


Et toi, on t'a appris à lire les topics jusqu'au bout avant de répondre ? :sarcastic:  
peemousse a dit qui avait tout mis dans une seule table quelque posts plus haut :o


Message édité par mareek le 13-07-2004 à 13:40:34

---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
Reply

Marsh Posté le 13-07-2004 à 15:01:21    

Vraiment mercu pour tout vos réponses !! dans la joie et la bonne humeur en plus ! La j'ai pas le temps de tester mais je vous tiens au courant !
 
A tout :p

Reply

Marsh Posté le 13-07-2004 à 21:07:08    

mareek a écrit :

Et toi, on t'a appris à lire les topics jusqu'au bout avant de répondre ? :sarcastic:  
peemousse a dit qui avait tout mis dans une seule table quelque posts plus haut :o


Je parle pas pour lui, je parle pour ceux qui lui ont dit de faire 3 tables :o

Reply

Marsh Posté le 15-07-2004 à 17:08:33    

EDIT : ma question traite de PHP, je vais poster dans le forum adéquate !
 
http://forum.hardware.fr/hardwaref [...] 4949-1.htm


Message édité par peemousse le 15-07-2004 à 17:45:18
Reply

Marsh Posté le 17-07-2004 à 01:15:31    

réponse rapide : commencer par modéliser. DBDesignor est gratos.
di.


---------------
di. / www.diredaredare.org - Ailes de la ville
Reply

Marsh Posté le 17-07-2004 à 13:34:32    

instantdharma a écrit :

réponse rapide : commencer par modéliser. DBDesignor est gratos.
di.

super pour un bete modele a 2 tables [:mlc]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed