Question pour bien optimiser ma bdd (jointures...) - SQL/NoSQL - Programmation
Marsh Posté le 07-08-2008 à 15:38:11
variante du 1- : les fichiers ne devraient pas etre stocké en base, juste le chemin d'accès
Marsh Posté le 07-08-2008 à 15:40:01
bah en fait la table "fichiers" c'est pour faire un gestionnaire de fichiers ou dedans t'as le nom du fichier, son chemin d'accès, son type...
Mais même si je stocke que le chemin d'accès, comment j'en mets plusieurs par article ?
Marsh Posté le 07-08-2008 à 15:45:35
si un fichier en peut etre rattaché qu'a nu seul articule, tu vas avoir une table qui ressemble a ça :
Code :
|
Marsh Posté le 07-08-2008 à 15:58:53
Oui mais justement... Le fichier peut être attaché à plusieurs articles, et chaque article peut avoir plusieurs fichiers
Marsh Posté le 07-08-2008 à 16:06:42
Code :
|
Marsh Posté le 07-08-2008 à 16:25:28
Donc tu me conseilles la solution n°1, j'ai juste un souci pour cette solution :
Vu qu'un article peut avoir 0 ou n fichier, je fais une requete avec un LEFT JOIN... Le problème est que cela me retourne autant de fois l'enregistrement qu'il a de fichier associé.
Exemple :
Code :
|
Marsh Posté le 07-08-2008 à 17:48:07
Si, philosophiquement parlant, ça ne te dérange pas, tu peux associer une image transparente ou blanche aux articles qui n'ont ni image ni vidéo associée.
- Avantage: pas de jointures externes car un article a au moins 1 image
- Inconvénient: considéré comme un "truc et astuce" chez certains développeurs et non comme une solution propre.
Marsh Posté le 08-08-2008 à 08:50:29
Euh ouais nan j'suis pas très truc et astuce, d'autant qu'ici ca ne change en rien à mon problème... Merci quand même !
Marsh Posté le 12-08-2008 à 03:08:51
soit tu fais en deux passes (un premier select pour ne récupérer que les informations de l'article, puis un second pour ne récupérer que la liste des fichiers attachés à l'article, ce qui évite de faire un left join, et accessoirement rend la détection de l'absence de fichier plus aisée) soit tu ne lis que la première ligne retournée par ta requête en ce qui concerne les infos du fichier, puis tu boucles sur toutes les lignes (y compris la première) pour retrouver les infos des fichiers attachés. a noter que le left join retournera une ligne avec des nulls pour les infos du fichier, et il faudra traîter ça proprement.
reste une solution batarde qui existe avec les versions récentes de PHP, une fonction "list" ou un truc comme ça qui permet de retourner sous forme d'une liste séparée par des ";" les informations d'une colonne non contenue dans la clause group by. perso je te déconseille cette méthode, même si elle est tentante, car ça interdit tout portage de ton site vers un autre SGBD. accessoirement, cette fonction doit très bien marcher avec quelques lignes, mais j'aimerais savoir ce que ça donne quand tu récupères 100 chemins d'accès à des fichiers avec... un varchar de quelques milliers de caractères, c'est un coup à avoir une erreur, voir pire, des données incomplètes.
Marsh Posté le 07-08-2008 à 15:34:24
Bonjour,
Voilà je suis en train de creer ma base de données (mysql) sur phpmyadmin et j'ai une question concernant l'optimisation :
Je vais avoir une table "articles" où chaque article pourra avoir plus fichier associés (image, vidéo...)
1° solution : je créé une table "fichiers" où je stocke mes fichiers et je créé une table "articles_fichiers" où je mets les correspondances pour chaque article
2° solution : je créé un champ fichier dans la table "articles" où je mets les ID des fichiers de la table "fichiers" séparé par des # par exemple
3° solution : avez-vous une meilleure idée ?
Je rappel que c'est pour gagner en performance...
Merci !
Message édité par zazerty le 07-08-2008 à 15:34:49