To zależy,
Ile będziesz mieć kategorii, jak często będziesz musiał je aktualizować?
Zrobiłem to wcześniej, kiedy dodałem Enum, ale napisałem też statyczną metodę w klasie i zapisałem tam prawidłowe nazwy
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'
];
}
}
Wykonując powyższe czynności możesz łatwo uzyskać dostęp do tablicy poprzez Item::get_categories(), która powinna odpowiadać wartościom w polu ENUM w bazie danych. Jeśli potrzebujesz dodać więcej kategorii, dodaj je do bazy danych, a następnie do tej funkcji. Możesz użyć tego, aby zweryfikować wybór użytkownika i wygenerować opcje javascript.
Jednak!!!!
Wspominasz rozstawienie, które zapełnia twoją tabelę, nie byłoby to w stanie łatwo zaktualizować twojego ENUM.
Użyłbym ENUM, ponieważ
1). Konfiguracja jest łatwa2). To trochę łatwiejsze niż dołączenie do dwóch stołów (ale JOINS to as, gdy się ich nauczysz)3). Jeśli używasz tabeli dodatkowej, musisz (jak wspomniałeś) najpierw wyszukać wartość z tej tabeli, a następnie wstawić, lub jeśli kategoria została użyta w menu rozwijanym, użyj identyfikatora kategorii i jej nazwy, aby wypełnić listę (zrobiłbym to w ten sposób)
Końcowa myśl
Wydajność obu sposobów (tabela przeglądowa i ENUM) pozwoliłaby nawet zauważyć różnicę, chyba że witryna jest bardzo zajęta. Nadal musiałbyś aktualizować tabelę kategorii za pomocą każdej wersji w obie strony, ale nieco łatwiej byłoby UŻYĆ instrukcji INSERT zamiast ALTER TABLE
Niezależnie od wybranego sposobu, jeśli ci się nie podoba, aktualizacja kodu będzie dość łatwa.
Mam nadzieję, że to pomoże i powodzenia
Pamiętaj Keep It Simple Stupid K.I.S.S