Tach!
Du meinst, in der Datenbank soll nicht nur vom Kind ein einzelner Verweis auf den Vorfahren vorhanden sein, sondern beim Vorfahren sollen eine unbekannte Anzahl Kindverweise gepflegt werden?
Nein, das meine ich nicht, wie kommst Du den darauf!? Hast Du überhaupt verstanden was ich geschrieben habe?
Nun, anscheinend nicht - wie so oft.
Mach die Abfrage so, dass jeder Knoten bzw. Objekt seine Kindknoten kennt.
Das Missverstehen fängt wohl schon beim ersten Satz an. Wie gestaltet man eine Abfrage so, dass die Einträge in der Ergebnismenge bestimmte Dinge kennen? Sollen sie diese erst beim Abfragen lernen? Soll dieses Wissen nicht in Form von Daten in der Tabellenstruktur enthalten sein? Oder wie soll ich mir das konkret vorstellen? Und welche Abfrage ist gemeint, die SQL-Query bereits oder erst ein anschließendes Aufbereiten nach dem Fetchen der Ergebnismenge?
Ziel also, aus der parent-Beziehung eine Child-Beziehung zu machen und im Ergebnis dessen hast Du eine Datenstruktur im Hauptspeicher, welche rekursiv durchlaufen werden kann.
Der Teil scheint mir klar zu sein. Aber wo erzeugst du den? Erst im Client? Wenn ja, warum soll denn nicht die Möglichkeit der rekursiven Abfragen direkt im DBMS genutzt werden? Microsofts SQL-Server bietet doch nicht umsonst dafür Unterstützung in Form von Common Table Expressions an.
Jeder Knoten wird als Objekt betrachtet, in Perl wäre es es ein Hash nach dem EAV-Muster
Ach herje, jetzt kommt das schon wieder.
{ Entity => { Attribute => Value}, 4711 => { childs => [] } # Arrayreferenz auf die Kindknoten }
Aber irgendwie entspricht das nicht meinem Verständnis von EAV. Man nimmt das EAV-Modell, weil man damit eine unbekannte Anzahl von Attributen unterschiedlichen Types definieren kann. Das wird hier gar nicht benötigt und so ist das hier einfach nur eine feststehende Datenstruktur, wie man sie auch mit einer starren OOP-Klasse definieren kann.
Für die Tabelle in einer DB reichen übrigens 3 Felder um eine solche Datenstruktur abbilden zu können.
Das Binärsystem ist auch recht einfach aufgebaut, einfach zu verstehen und die grundlegenden Verfahren einfach zu implementieren. Es ist so universell verwendbar, dass wir gerade dabei sind, all unser Wissen auf Basis dieses Systems zu speichern, es damit zu verarbeiten und zu transportieren. Und trotzdem verwenden wir beispielsweise für das schriftliche Kommunizieren ein deutlich komplexeres System aus Buchstaben und anderen Zeichen. Das passiert nicht nur aus Tradition, sondern weil es nicht nur in diesem Fall einfacher und praktischer ist, ein spezialisierteres System zu verwenden.
dedlfix.