Bonjour à tous ! :)

J'ai suivi le tutoriel de Grafikart pour "Créer un portfolio de A à Z" pour concevoir mon portfolio.

Dans ce tutoriel, une réalisation (table works) appartient à une seule catégorie (table categories) grâce à la clef étrangère de type INT category_id (présente dans la table works).

Cependant, je souhaiterai qu'une réalisation puisse appartenir à plusieurs catégories. Mon idée est de modifier la clef étrangère category_id en categories_id de manière à ce qu'elle puisse stocker un à plusieurs id, mais je ne sais quel type lui attribuer.

Dans l'attente de vos réponses les plus folles ;), je vous remercie pour m'avoir lu.

2 réponses


flan
Réponse acceptée

En stockant plusieurs catégories dans une seul attribut (attribut multi-valué), tu violes une des règles de la première forme normale. De plus, tu te rends bien compte que cela ne va pas te permettre de faire des requêtes SQL classiques pour traiter ces catégories (comment travailler sur plusieurs valeurs d'un coup ? Sortir tous les éléments qui appartiennent à la catégorie x ? Tu vas devoir déporter cette logique dans ton code, qui est inutile et alourdit tout puisque tu vas devoir itérer sur TOUS tes enregistrements).

À la place, pour définir cette relation Many-to-Many (chaque élément peut avoir plusieurs catégories et chaque catégorie peut avoir plusieurs éléments), tu vas devoir créer une table de jointure, entre category_id et element_id (tous deux clés étrangères vers les identifiants des deux bonnes tables).

rafidu57
Auteur

D'accord, réponse bien claire et pertinente, merci pour ta réponse rapide flan !