Dipende,
Quante categorie avrai, con quale frequenza dovrai aggiornarle?
Ho adottato l'approccio prima in cui ho aggiunto Enum, ma ho anche scritto un metodo statico in una classe e memorizzato lì i nomi validi
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'
];
}
}
Facendo quanto sopra puoi facilmente accedere all'array per Item::get_categories(), che dovrebbe corrispondere ai valori nel campo ENUM nel database. Se hai bisogno di aggiungere più categorie, aggiungile al database e poi a questa funzione. Puoi usarlo per convalidare la scelta degli utenti e generare le opzioni javascript.
Comunque!!!!
Menzioni un seeding che popola la tua tabella, questo non sarebbe in grado di aggiornare facilmente il tuo ENUM per te.
Userei un ENUM, perché
1). È facile da configurare2). È leggermente più facile che unire i due tavoli (ma JOINS è un asso quando li impari)3). Se hai utilizzato una tabella secondaria, dovresti (come hai sottolineato) prima cercare il valore da quella tabella, quindi inserirlo, oppure se la categoria è stata utilizzata in un menu a discesa, utilizzare l'id della categoria e il suo nome per popolare il menu a discesa (lo farei in questo modo)
Pensiero finale
Le prestazioni di entrambi i modi (tabella di ricerca ed ENUM) si notano persino la differenza a meno che il tuo sito non sia molto occupato. Dovresti comunque aggiornare la tabella delle categorie con ciascuna versione in entrambi i modi, ma sarebbe leggermente più semplice UTILIZZARE un'istruzione INSERT invece di una ALTER TABLE
Qualunque sia il modo che hai scelto, se non ti piace, sarebbe abbastanza facile aggiornare il tuo codice.
Spero che questo aiuti e buona fortuna
Ricorda Keep It Simple Stupid K.I.S.S