Daniel: Nochmals eine Frage zur Baumstruktur

Hallo nocheinmal!

Ich habe vor ein paar Tagen eine Frage zur Baumstruktur gehabt, und etwas möchte ich bitte noch wissen: Wenn ich jetzt Elemente des Baumes hinzufüge oder ändere, so muss ich dann logischerweise auch die Relationen zu den anliegenden Elementen/Knoten aktualisieren. Soweit so gut. Wie aber kann ich dann am einfachsten die Suchreihenfolge festlegen? Ich habe bereits eine unsortierte Struktur in der Datenbank, die es zu sortieren gilt. Die Felder der Datenbank sind:

ID = Eindeutige ID des Elementes
Parent_ID = Zugehörigkeit zum Elternelement/Knoten
Child_ID = Element ist ein Knoten und zeigt auf das 1. untergeordnete Element
Next_ID = beschreibt das nächste Element in der gleichen hierarchischen Ebene

Jetzt weiss ich nicht welches Verfahren am besten ist, sollte ich wenn der Benutzer ein Element hinzufügt/löscht jedesmal ALLE Elemente die in der gleichen hierarchischen Ebene sind aktualisieren(auch bestehende werden bei evtl gleicher Reihenfolge wieder mit dem alten Wert überschrieben), oder gleich von Anfang an, wenn der Baum angelegt wird gleich die Sortierreihenfolge beachten und nur die wirklich zugehörigen Knoten aktualisieren?

Performancemässig besser wäre natürlich schon die letzte der beiden Varianten. Oder gibt es eine andere Möglichkeit dies zu tun?

Danke für die Hilfe,
Daniel

  1. Hallo,

    ID = Eindeutige ID des Elementes
    Parent_ID = Zugehörigkeit zum Elternelement/Knoten
    Child_ID = Element ist ein Knoten und zeigt auf das 1. untergeordnete Element
    Next_ID = beschreibt das nächste Element in der gleichen hierarchischen Ebene

    Warum so kompliziert? Die ersten beiden Angaben (id und parent_id) reichen völlig aus, um mit der Baumstruktur zu arbeiten. Dann hast du wesentlich weniger Arbeit beim aktualisieren. Wenn du die child_id oder next_id benötigst, holst du sie dir mit einem select, etwa so:

    child_id = select * from tree where parent_id = <myid> order by id limit 1;
    next_id = select * from tree where id = <myid> and parent_id = <myparentid> order by id limit 1;

    Mit freundlichen Grüßen,
    Michael Nagler

    1. Hallo,

      Warum so kompliziert? Die ersten beiden Angaben (id und parent_id) reichen völlig aus, um mit der Baumstruktur zu arbeiten. Dann hast du wesentlich weniger Arbeit beim aktualisieren. Wenn du die child_id oder next_id benötigst, holst du sie dir mit einem select, etwa so:

      child_id = select * from tree where parent_id = <myid> order by id limit 1;
      next_id = select * from tree where id = <myid> and parent_id = <myparentid> order by id limit 1;

      Da hast du allerdings recht, mit den 2 ID's wäre es viel leichter. Aber ich habe mir gedacht, wenn man die Reihenfolgen auch manuell festlegen will, dann funktioniert es mit den 2 ID's leider nicht mehr (bzw nur sehr schwer). Ich muss dann wohl abwägen was wichtiger ist, entweder Funktionalität oder einfache Programmierung.

      Grüsse,
      Daniel