Kategorien in Kategorien [Link-System]

Es gibt verschiedene Methoden, um einen Baum darzustellen (also etwas mit Hierarchien). Jede Methode hat Vor- und Nachteile.

Das Parent - Child Modell, was Karl F. da beschreibt ist das einfachste, wenn es um die Verwaltung geht. Du speicherst einfach nur bei jeder Kategorie die ID der Mutter mit und das wars. Natürlich musst du da noch separat etwas zum sortieren einbauen.
Der Nachteil dieser Methode liegt in der Abfrage. Wenn du zum Beispiel ein Menu aufbauen willst, das diese Hierarchie wiedergibt, musst du erst mehrere Queries absetzen, um von der geöffneten Kategorie die Wurzel zu finden. Danach musst du alle Wurzeln abfragen und den Pfad entlang bis zur geöffneten Kategorie folgen. Das dauert schon ziemlich lang. Es kommt zur Rekursion und mehrere Queries an die DB abzusetzen wird generell zum Bremsklotz.

Daneben gibt es das Pfad Modell. Dabei wird in einem Feld in der Datenbank ein String gespeichert, der den Pfad zur Kategorie in der Form darstellt:

0001 -> irgendein Wurzelknoten
0001-0001 -> Kind dieses Wurzelknotens
0001-0002 -> zweites Kind der ersten Wurzel
0002 -> usw.

Vorteil: du hast immer den ganzen Pfad in der ID. Du kannst problemlos alle Geschwister abfragen, weißt genau in welchem Level die Kategorie steckt usw.

Nachteil: ein String hat eine bestimmte Länge. Du kannst mit dieser Methode nur 51 Level tief gehen. Du könntest die Trenner weglassen, dann könntest du 64 Level tief. Du könntest dich auch auf 3 Stellen beschränken, dann kämst du sogar auf 85 Stellen. In den meisten Fällen ist das ja auch ausreichend.

Die Methode die hier vorgestellt habe heißt Nested Sets. Diese Methode hat den Vorteil sehr elegant und sehr schnell zu sein. Aber die Verwaltung des Baums ist Horror. Daher gibt es dan Klassen, die einem das abnehmen.

Was du bevorzugst ist natürlich dir überlassen. Aber das Parent Child Modell sollte wenn möglich nur bei sehr kleinen Bäumen angewendet werden. Das ist wirklich das langsamste Modell von allen.

Ciao, Jörg
 
folgende lösung ist recht einfach... benötigt aber mySQL

http://www.tutorials.de/tutorials27144.html

ich benutze diese lösung für ein menüsystem auf meiner eigenen seite.

allerdings ist es eine rekursive abfrage in der datenbank - wovon ja i.a. abgeraten wird. bei geringen rekursionstiefen ist es aber kein großes problem.

die zweite lösung sind die schon genannten nested-sets - sehr elegant, aber ich bin schon am versuch, das prinzip zu verstehen gescheitert ;-)
 
Zurück