2010-07-15 13 views
6

Nehmen wir an, wir haben eine Tabelle mit Benutzerkommentaren. Kommentare der ersten Ebene haben einen Verweis auf einen Artikel, an den sie angehängt sind. Deeper-Level-Kommentare haben diesen Verweis nicht von Entwurf, aber sie haben einen Verweis auf den übergeordneten Kommentar.Was ist die beste Vorgehensweise zum Abrufen eines Baums von Knoten aus der Datenbank für das weitere Rendern?

Für diese Datenbankstruktur - was wäre die effizienteste Möglichkeit, alle Kommentare für einen bestimmten Artikel abzurufen und dann im HTML-Format zu rendern? (Nehmen wir an, wir haben ca. 200 Kommentare der ersten Ebene und der tiefsten Ebene von 20)

+0

Hinweis: Ihr Titel fragt nach dem "Best Practice", aber Ihre Frage fragt nach dem "effizientesten Weg". Diese sind nicht unbedingt gleich. –

Antwort

9

Ich empfehle normalerweise ein Design namens Schließung Tabelle.

Siehe Beispiel in meiner Antwort auf What is the most efficient/elegant way to parse a flat table into a tree?

ich auch diese Präsentation entworfen: Models for Hierarchical Data with SQL and PHP. Ich habe eine PHP-App entwickelt, die aus einer Sammlung von hierarchischen Daten mit 490.000 Knoten einen Baum in 0,3 Sekunden rendert.

Ich habe über Closure Table hier gebloggt: Rendering Trees with Closure Table.

Ich schrieb ein Kapitel über verschiedene Strategien für hierarchische Daten in meinem Buch, SQL Antipatterns: Avoiding the Pitfalls of Database Programming.

5

Für den effizientesten Weg Quassnoi hat eine Reihe von Artikeln zu diesem Thema geschrieben.

Ich schlage vor, Sie den ersten Artikel lesen und die Beispiele anpassen mit Ihren spezifischen Tabelle zu arbeiten, aber der Kern ist es, eine Funktion zu machen, die über die r rekrutieren kann müssen Sie holen. Wahrscheinlich wollen Sie auch das Niveau (Tiefe in der Hierarchie), so dass der zweite Artikel wahrscheinlich auch relevant ist.

Die anderen Artikel können nützlich sein, wenn Sie andere Arten von Abfragen für Ihre Daten durchführen müssen. Er hat auch einen Artikel Adjacency list vs. nested sets: MySQL, in dem er hoch optimierte Abfragen sowohl für das Adjazenzmodell als auch für das verschachtelte Mengenmodell vergleicht.