Bonjour,

Je mets en place actuellement un catalogue de produits enregistré dans une base de données MySQL où chaque produit peut appartenir à une ou plusieurs catégories.

Structure de la table "catalogue_produit" (simplifiée) :
id smallint(5)
categorie smallint(3)
nom varchar(40)

Structure de la table "catalogue_categorie" (simplifiée également) :
id smallint(3)
nom varchar(40)
parent smallint(3)

Les champs catalogue_produit.categorie et catalogue_categorie.id sont liés.

Je vais tâcher de vous prendre un exemple parlant…

Dans la table catalogue_produit, j'ai :
id=1, categorie=3, nom=Maquereau blanc
id=2, categorie=4, nom=Tyrannosaure

Dans la table catalogue_categorie, j'ai :
id=1, nom="Poisson", parent=0
id=2, nom="Poisson de mer", parent=1
id=3, nom="Maquereau", parent=2
id=4, nom="Dinosaure", parent=0

Le produit Maquereau blanc appartient directement à une catégorie, qui elle-même appartient à 2 autres catégories, ce qui fait 3 en tout. Le Tyrannosaure n'appartient qu'à une seule catégorie (car n'a pas de parent).

Je voudrais construire une ou plusieurs requêtes, les plus optimisées possibles, qui me permettent d'afficher :
- Le nom du produit
- La ou les catégorie(s) auxquelles il appartient

Est-ce possible ainsi ou dois-je revoir la structure de mes tables ?

Serait-ce plus pratique d'avoir 3 tables comme ceci :
catalogue_produit
id smallint(5)
nom varchar(40)

catalogue_categorie
id smallint(3)
nom varchar(40)
parent smallint(3)

catalogue_correspondance
produit_id smallint(5)
categorie_id smallint(3)

Merci pour votre aide !