J'ai compris maintenant,
Je te propose un modèle relationnel qui peut te guider :
Selon ce que tu disais :
... tous les produits d'une marques dont la catégorie était "clés_usb" par exemple en sachant qu'une marque pouvait appartenir à d'autres catégories. ...
Le mieux est de répertorier les produits par catégorie et par marque
Ce qui se lit :
Catégorie ---n---> Produit --- 1---> Marque
et
Marque ---n---> Produit ---1---> Catégorie
Ce qui veut dire qu'une catégorie définit plusieurs produits dont chacun a une marque bien définie.
Et une marque définit plusieurs produits dont chacun a une catégorie.
De plus la table Catégorie permet de stocker toutes les catégories (uniques) et la table Marque stocke les marques (uniques)
La table produit a donc deux relations fonctionnelles : marque et catégorie.
L'avantage aussi d'avoir ces tables est de pouvoir construire des listes de choix d'aide à la saisie d'informations se référant aux catégories et aux marques.
Les deux relations permettront le regroupement des produits par catégorie et/ou par marque.
Le modèle est :
Catégorie (code int, nom varchar(30), primary key(code))
Marque(code int, nom varchar(30), primary key(code))
Produit (ref int, designation varchar(30), prix double, stock int, marque int, categorie int, primary key(ref))
Les champs marque et categorie de la table produit permettent la liaison avec les clé primaires des tables Marque et Catégorie.
Test du modèle :
Le modèle doit répondre à ta question (et aux autres besoinss d'ailleurs)
Q1. Je veux afficher tous les produits d'une marque (?) dont la catégorie était "clés usb"
R1. SELECT * FROM Marque m, Produit p, Catégorie c
WHERE c.code = p.categorie AND m.code = p.marque
AND m.nom = ? AND c.nom = "clés usb"
Q2. Je veux afficher les produits d'une catégorie classés par nom de marque
R2. SELECT c.code, c.nom, m.code, m.nom, ref, designation, prix, stock
FROM Marque m, Produit p, Catégorie c
WHERE c.code = p.categorie AND m.code = p.marque
AND c.nom = "clés usb"
ORDER BY m.nom
....