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


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
Auteur

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