Es kommt darauf an,
Wie viele Kategorien werden Sie haben, wie oft müssen Sie sie aktualisieren?
Ich habe den Ansatz schon einmal gewählt, wo ich Enum hinzugefügt, aber auch eine statische Methode in eine Klasse geschrieben und dort die gültigen Namen gespeichert habe
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'
];
}
}
Auf diese Weise können Sie einfach per Item::get_categories() auf das Array zugreifen, das den Werten im ENUM-Feld in der Datenbank entsprechen sollte. Wenn Sie weitere Kategorien hinzufügen müssen, fügen Sie sie der Datenbank und dann dieser Funktion hinzu. Sie können dies verwenden, um die Auswahl des Benutzers zu validieren und die Javascript-Optionen zu generieren.
Allerdings!!!!
Sie erwähnen ein Seeding, das Ihre Tabelle füllt, das könnte Ihre ENUM nicht einfach für Sie aktualisieren.
Ich würde ein ENUM verwenden, weil
1). Es ist einfach zu setup2). Es ist etwas einfacher, als die beiden Tische zu verbinden (aber JOINS sind ein Ass, wenn Sie sie lernen)3). Wenn Sie eine sekundäre Tabelle verwendet haben, müssen Sie (wie Sie bereits betont haben) zuerst den Wert aus dieser Tabelle suchen und dann einfügen, oder wenn die Kategorie in einer Dropdown-Liste verwendet wurde, verwenden Sie die Kategorie-ID und ihren Namen, um die Dropdown-Liste zu füllen (Ich würde es so machen)
Abschließender Gedanke
Bei der Leistung beider Möglichkeiten (Nachschlagetabelle und ENUM) würden Sie den Unterschied kaum bemerken, es sei denn, Ihre Website ist sehr, sehr ausgelastet. Sie müssten die Kategorientabelle immer noch mit jeder Version in beide Richtungen aktualisieren, aber es wäre etwas einfacher, eine INSERT-Anweisung anstelle einer ALTER TABLE
zu verwendenWie auch immer Sie sich entscheiden, wenn Sie es nicht mögen, wäre es ganz einfach, Ihren Code zu aktualisieren.
Hoffe, das hilft, und viel Glück
Denken Sie daran Keep It Simple Stupid K.I.S.S