Cela dépend,
Combien de catégories aurez-vous, à quelle fréquence devrez-vous les mettre à jour ?
J'ai déjà adopté l'approche où j'ai ajouté Enum, mais j'ai également écrit une méthode statique dans une classe et y ai stocké les noms valides
class Item{
public static function get_categories()
{
// only works in php >=5.4 otherwise use return array('Category1'...);
return [
'Category1' => 'Category1',
'Category2' => 'Category2',
'Category3' => 'Category3'
];
}
}
En faisant ce qui précède, vous pouvez facilement accéder au tableau par Item::get_categories(), qui doit correspondre aux valeurs du champ ENUM de la base de données. Si vous avez besoin d'ajouter plus de catégories, ajoutez-les à la base de données puis à cette fonction. Vous pouvez l'utiliser pour valider le choix des utilisateurs et générer les options javascript.
Cependant !!!!
Vous mentionnez un amorçage qui remplit votre table, cela ne pourrait pas facilement mettre à jour votre ENUM pour vous.
J'utiliserais un ENUM, car
1). Il est facile à configurer2). C'est légèrement plus facile que de joindre les deux tables (mais les JOINS sont des atouts quand vous les apprenez)3). Si vous avez utilisé une table secondaire, vous devez (comme vous l'avez souligné) rechercher d'abord la valeur de cette table, puis l'insérer, ou si la catégorie a été utilisée dans une liste déroulante, utilisez l'identifiant de la catégorie et son nom pour remplir la liste déroulante (je ferais comme ça)
Réflexion finale
Les performances des deux manières (table de recherche et ENUM) vous remarquerez même la différence à moins que votre site ne soit très très occupé. Vous devrez toujours mettre à jour la table des catégories avec chaque version dans les deux sens, mais il serait légèrement plus facile d'utiliser une instruction INSERT au lieu d'une ALTER TABLE
Quelle que soit la méthode choisie, si vous ne l'aimez pas, il serait assez facile de mettre à jour votre code.
J'espère que cela vous aidera et bonne chance
Rappelez-vous Keep It Simple Stupid K.I.S.S