Зависи,
Колко категории ще имате, колко често ще трябва да ги актуализирате?
Възприел съм подхода преди, където добавих Enum, но също така написах статичен метод в клас и съхраних валидните имена там
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'
];
}
}
Правейки горното, можете лесно да получите достъп до масива от Item::get_categories(), който трябва да съответства на стойностите в полето ENUM в базата данни. Ако трябва да добавите още категории, добавете ги към базата данни и след това към тази функция. Можете да използвате това, за да потвърдите избора на потребителите и да генерирате опциите за JavaScript.
Въпреки това!!!!
Споменавате зареждане, което попълва вашата таблица, това няма да може лесно да актуализира вашия ENUM вместо вас.
Бих използвал ENUM, защото
1). Лесно се настройва2). Това е малко по-лесно, отколкото да се присъедините към двете маси (но JOINS са асо, когато ги научите)3). Ако сте използвали вторична таблица, ще трябва (както посочихте) първо да потърсите стойността от тази таблица и след това да вмъкнете, или ако категорията е била използвана в падащо меню, използвайте идентификатора на категорията и нейното име, за да попълните падащото меню (бих го направил по този начин)
Последна мисъл
Производителността и на двата начина (таблица за търсене и ENUM), по която бихте забелязали дори разликата, освен ако вашият сайт не е много много зает. Все пак ще трябва да актуализирате таблицата с категории с всяка версия и по двата начина, но би било малко по-лесно да ИЗПОЛЗВАТЕ израз INSERT вместо ALTER TABLE
Който и начин да изберете, ако не ви харесва, ще бъде доста лесно да актуализирате кода си.
Надявам се това да помогне и успех
Запомнете Keep It Simple Stupid K.I.S.S