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).