Záleží,
Kolik kategorií budete mít, jak často je budete muset aktualizovat?
Již dříve jsem použil přístup, kdy jsem přidal Enum, ale také napsal statickou metodu do třídy a uložil tam platná jména
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'
];
}
}
Výše uvedeným způsobem můžete snadno získat přístup k poli pomocí Item::get_categories(), které by mělo odpovídat hodnotám v poli ENUM v databázi. Pokud potřebujete přidat další kategorie, přidejte je do databáze a poté do této funkce. Můžete to použít k ověření volby uživatele a vygenerování možností javascriptu.
Nicméně!!!!
Zmíníte-li se o zdroji, který zaplní vaši tabulku, nebude možné snadno aktualizovat váš ENUM.
Použil bych ENUM, protože
1). Je snadné nastavit2). Je to o něco jednodušší než spojit dva stoly (ale JOINS jsou eso, když se je naučíte)3). Pokud jste použili sekundární tabulku, museli byste (jak jste zdůraznili) nejprve vyhledat hodnotu z této tabulky a poté ji vložit, nebo pokud byla kategorie použita v rozevíracím seznamu, použijte k vyplnění rozevíracího seznamu ID kategorie a její název. (udělal bych to takto)
Závěrečná úvaha
Výkon obou způsobů (vyhledávací tabulka a ENUM) byste si ječmen dokonce všimnul rozdílu, pokud váš web není velmi zaneprázdněn. Stále byste museli aktualizovat tabulku kategorií s každou verzí oběma způsoby, ale bylo by o něco jednodušší POUŽÍT příkaz INSERT namísto ALTER TABLE
Ať už si vyberete jakýkoli způsob, pokud se vám to nelíbí, bylo by docela snadné kód aktualizovat.
Doufám, že to pomůže, a hodně štěstí
Pamatujte Keep It Simple Stupid K.I.S.S