Stockage de nombreuse catégories pour un produit

Par imars, il y a 11 ans


Base de données MySQL

Dans le cadre d'un projet, je dois pouvoir associer autant de catégorie (sur une base de l'infini et au delà).

Deux réflexion :
La première faire une table product_category pour lier le tout avec JOIN LEFT ...

db.product { id=34 title = iPhone } db.category { id=76 title = Smartphone id=77 title = Téléphone } db.product_category { id=1 product = 34 category = 76 ........................... id = 2 product = 34 category = 77 ............................ etc. }

ou alors, stocker l'ensemble des noms des catégories dans la table product_category sur une seule ligne :

db.product_category { id=1 product=34 category = "Apple, Smartphone, Téléphone, 3G, 4G, etc. }

et ne pas utilisé un

SELECT FROM WHERE AND ORDER BY ASC

mais plutôt un

SELECT FROM WHERE (MATCH ("mot clés") AGAINST ("mot clés*" IN BOOLEAN MODE)) ORDER BY ASC

Je voulais avoir vos retour sur cette réflexion en terme de d'organisation et sur les performances entre les deux méthodes ?
Merci d'avance

2 réponses

Huggy, il y a 11 ans

Bonjour imars,
Mettre tout à la suite dans une chaine c'est de la KKboudasse.
En base de données, il y a des règles, tu dois identifier le type de relation 1-1, 1-N ou N-N
Là typiquement tu es dans du N-N, il te faut créer une table intermédiaire 'product-category' qui reprend les deux clés id_product et id_category
Au niveau des requêtes c'est beaucoup plus façile (ajout, suppression, filtrage, comptage) et tu bénéficies des optimisations SQL (index).
En plus il n' y a pratiquement plus aucune limite en terme de nombre de 'product-category'.

imars, il y a 11 ans

ok Merci Huggy, je pense que le mot KKboudasse est suffisament claire pour oublier cette idée ;-)