Det beror på,
Hur många kategorier kommer du att ha, hur ofta behöver du uppdatera dem?
Jag har använt tillvägagångssättet förut där jag lade till Enum, men även skrev en statisk metod i en klass och lagrade de giltiga namnen där
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'
];
}
}
Genom att göra ovanstående kan du enkelt få tillgång till arrayen med Item::get_categories(), som ska motsvara värdena i ENUM-fältet i databasen. Om du behöver lägga till fler kategorier, lägg till dem i databasen och sedan till den här funktionen. Du kan använda detta för att validera användarens val och generera javascript-alternativen.
Dock!!!!
Du nämner en seding som fyller din tabell, detta skulle inte enkelt kunna uppdatera din ENUM åt dig.
Jag skulle använda ett ENUM, eftersom
1). Det är lätt att ställa in2). Det är lite lättare än att gå med i de två borden (men JOINS är ess när du lär dig dem)3). Om du använde en sekundär tabell måste du (som du påpekade) först slå upp värdet från den tabellen och sedan infoga, eller om kategorin användes i en rullgardinsmeny, använd kategori-id och dess namn för att fylla i rullgardinsmenyn (jag skulle göra så här)
Sista tanke
Prestanda på båda sätten (uppslagstabell och ENUM) du skulle korn till och med märka skillnaden om inte din webbplats är väldigt mycket upptagen. Du måste fortfarande uppdatera kategoritabellen med varje version åt båda hållen, men det skulle vara något lättare att ANVÄNDA en INSERT-sats istället för en ALTER TABLE
Oavsett vilket sätt du väljer, om du inte gillar det, skulle det vara ganska enkelt att uppdatera din kod.
Hoppas detta hjälper och lycka till
Kom ihåg Keep It Simple Stupid K.I.S.S