Ich habe eine PHP-Webanwendung, die eine MySQL-Datenbank für das Tagging von Objekten verwendet, in der ich die Tag-Struktur verwendet habe, die als Antwort auf diese SO-Frage .
Ich möchte eine Tag-Hierarchie implementieren, bei der jedes Tag ein eindeutiges übergeordnetes Tag haben kann. Die Suche nach einem übergeordneten Tag T würde dann mit allen Nachkommen von T übereinstimmen (d. h. T, Tags, deren Elternteil T ist (Kinder von T), Enkel von T usw.).
Am einfachsten scheint es zu sein, der Tag-Tabelle ein Feld ParentID hinzuzufügen, das die ID des übergeordneten Tags eines Tags enthält, oder eine magische Zahl, wenn der Tag keinen übergeordneten Tag hat. Die Suche nach Nachkommen erfordert dann jedoch wiederholte vollständige Durchsuchungen der Datenbank, um die Tags in jeder "Generation" zu finden, was ich gerne vermeiden möchte.
Ein (vermutlich) schnellerer, aber weniger normalisierter Weg wäre eine Tabelle, die alle Kinder eines jeden Tags oder sogar alle Nachkommen eines jeden Tags enthält. Dies birgt jedoch die Gefahr inkonsistenter Daten in der Datenbank (z. B. wenn ein Tag das Kind von mehr als einem Elternteil ist).
Gibt es eine gute Möglichkeit, Abfragen zum schnellen Auffinden von Nachkommen zu machen, während die Daten so normalisiert wie möglich bleiben?