Erstellen eines Listenbaums mit SQLite

8

Ich versuche, eine hierarchische Liste mit PHP und einem SQLite-Tabellen-Setup wie folgt zu erstellen:

%Vor%

Die Listen würden mit ungeordneten Listen erstellt werden und diese Art von Baumstruktur ermöglichen:

%Vor%

Ich habe das mit Verzeichnissen und flachen Arrays gesehen, aber ich kann nicht scheinen, dass es mit dieser Struktur und ohne Tiefenbegrenzung funktioniert.

    
syllabic 09.10.2010, 21:33
quelle

1 Antwort

13

Sie verwenden ein Lehrbuchdesign zum Speichern hierarchischer Daten in einer SQL-Datenbank. Dieser Entwurf wird Adjazenzliste genannt, d. H. Jeder Knoten in der Hierarchie hat einen parentid Fremdschlüssel für seinen unmittelbaren Vater.

Mit diesem Design können Sie keinen Baum wie beschrieben erzeugen und eine beliebige Tiefe für den Baum unterstützen. Sie haben das schon herausgefunden.

Die meisten anderen SQL-Datenbanken (PostgreSQL, Microsoft, Oracle, IBM DB2) unterstützen rekursive Abfragen, die dieses Problem lösen. Aber SQLite und MySQL unterstützen diese Funktion von SQL noch nicht.

Sie brauchen also eine andere Lösung, um die Hierarchie zu speichern. Dafür gibt es mehrere Lösungen. Siehe meine Präsentation Modelle für hierarchische Daten mit PHP und MySQL für Beschreibungen und Beispiele.

Normalerweise bevorzuge ich ein Design, das ich Closure Table nenne, aber jedes Design hat Stärken und Schwächen. Welcher für Ihr Projekt am besten geeignet ist, hängt davon ab, welche Arten von Abfragen Sie effizient mit Ihren Daten durchführen müssen. Also sollten Sie die Lösungen studieren und eine für sich selbst auswählen.

    
Bill Karwin 09.10.2010, 21:45
quelle

Tags und Links