Je travaille sur une application vitrine en PHP avec MySQL. Je stocke actuellement mes données dans 4 tableaux: un pour les lignes de produits, un pour les produits spécifiques dans ces gammes de produits, un pour les images de produits, et un qui spécifie quelles images sont liées à quels produits spécifiques. Chaque produit spécifique appartient à une ligne de produits, chaque image de produit peut appartenir à plusieurs produits spécifiques, et chaque produit spécifique peut avoir plusieurs images. Mes tableaux ressemblent à ceci:Comment stocker des données d'image de produit et de produit pour un magasin en ligne?
ProductLines
id, name, description, etc.
SpecificProducts
productLineID
id, color, size, etc.
ProductImageLinks
specificProductID
imageID
Images
id, imageFileLocation, name, etc.
Cela fonctionne très bien de cette façon, mais il semble que ce ne soit pas très efficace à des fins de récupération. Par exemple, j'ai une page qui répertorie chaque ligne de produits avec une vignette d'une image choisie au hasard à partir de cette ligne de produits. Pour ce faire, je dois d'abord interroger la base de données pour une liste de toutes les lignes de produits, puis exécuter une requête distincte pour chaque ligne de produits pour obtenir tous les produits spécifiques qui ont des images associées, choisissez l'une d'entre elles, puis interrogez à nouveau pour obtenir l'image. Une autre possibilité que j'ai envisagée serait d'utiliser une requête pour obtenir toutes les lignes de produits que je regarde, une deuxième requête pour obtenir tous les produits spécifiques pour toutes ces lignes de produits, une troisième requête pour obtenir tous les liens d'image qui spécifient quelles images sont liées à quels produits spécifiques, et une quatrième requête pour obtenir toutes ces images. J'imagine que cela serait un peu plus rapide en raison du nombre réduit de requêtes, mais cela laisserait beaucoup de travail à PHP pour déterminer les connexions entre les lignes de produits, les produits et les images, ce qui pourrait être tout aussi lent.
Donc, ma question est, y at-il une meilleure façon de stocker ces données? Ou une meilleure façon de le récupérer en fonction de la base de données que j'ai déjà en place? Ou est l'une des deux options que j'ai identifié vraiment mon meilleur pari?
Editer: Je ne stocke pas les fichiers image dans la base de données. Les fichiers d'image sont stockés dans le système de fichiers. Ma table "Images" dans la base de données stocke simplement l'emplacement du fichier image avec des informations utiles comme le titre de l'image, texte alt, etc
Quand récupérez-vous l'image? Il n'est pas nécessaire d'aller chercher ça tant que le navigateur ne le demande pas - donc l'extraction de l'image ne devrait pas faire partie de la construction de cette page - seul un lien devrait être inséré dans le html – nos
Par "image" . Je ne récupère pas réellement le fichier d'image, juste des données de la base de données qui me disent l'URL du fichier d'image plus des informations utiles comme le texte d'alt. Désolé, ce n'était pas clair. – Robert