modified-preorder-tree-t

___ tag123database ___ Eine Datenbank ist eine organisierte Sammlung von Daten. Es ist die Sammlung von Schemas, Tabellen, Abfragen, Berichten, Ansichten und anderen Objekten. Die Daten sind typischerweise so organisiert, dass sie Aspekte der Realität so modellieren, dass sie Prozesse unterstützen, die Informationen benötigen. Verwenden Sie dieses Tag, wenn Sie Fragen zum Entwerfen einer Datenbank haben. Wenn es sich um ein bestimmtes Datenbankverwaltungssystem (z. B. MySQL) handelt, verwenden Sie stattdessen dieses Tag. ___ qstnhdr ___ Speichern von zusammengesetzten Mustern (hierarchische Daten) in der Datenbank ___ tag123modifiziertepreordertreet ___ hilf uns dieses Wiki zu bearbeiten ___ qstntxt ___

Was sind Best Practices zum Speichern von zusammengesetzten Mustern in einer relationalen Datenbank?

Wir haben Modified Preorder Tree Traversal verwendet. Dies ist sehr schnell, um den gesamten Baum zu erstellen, aber es ist sehr langsam, neue Knoten einzufügen oder zu löschen (alle linken und rechten Werte müssen angepasst werden). Das Abfragen der untergeordneten Elemente eines Knotens ist nicht einfach und sehr langsam.

Eine andere Sache, die wir bemerkt haben, ist, dass Sie wirklich sicherstellen müssen, dass der Baum nicht unordentlich wird. Sie benötigen Transaktionssperren, sonst können die linken und rechten Werte beschädigt werden, und das Korrigieren eines beschädigten linken rechten Baums ist keine einfache Aufgabe.

Es funktioniert jedoch sehr gut, die Modified Preorder Tree Traversal, aber ich frage mich, ob es bessere Alternativen gibt.

    
___ tag123hierarchicaldata ___ Hierarchische Daten spiegeln eine Reihe von Eltern-Kind-Beziehungen wider. Diese können in einer Genealogie, einer Taxonomie, einer Liste von Anforderungen für die Teilezusammenstellung und unzähligen anderen Instanzen gefunden werden. Methoden für den Umgang mit hierarchischen Daten sind oft essentiell für die Datenverwaltung und -analyse. ___ answer694976 ___

Der beste Weg, Hierakial-Daten in einer Datenbank zu speichern, die ich gehört habe, ist die Verwendung eines String-Attributs, wobei der Inhalt die Liste der Eltern ist, die durch, sagen wir, Doppelpunkte getrennt sind.

    
___ answer694974 ___

Während alle Nachkommen einer Reihe mit MPTT schnell gefunden werden, kann es schwierig sein, alle Kinder zu finden. Allerdings sollten Sie das beheben können, indem Sie Ihrer Tabelle ein %code% -Feld hinzufügen, das das Elternelement der Zeile (ja, redundant) aufzeichnet. Dann wird die Suche:

%Vor%

Ja, %code% enthält redundante Informationen, die Ihre Tabelle potenziell denormalisieren. Da aber jedes Einfügen / Aktualisieren / Löschen globale Änderungen erfordert, ist es nicht viel zu bezahlen, %code% aktuell zu halten. Sie könnten auch ein %code% -Feld verwenden, das die vertikale Ebene der Zeile aufzeichnet, obwohl sich dies bei bestimmten Arten von Transformationen (z. B. Verschieben einer Teilstruktur an einen anderen Punkt in der Baum).

Die einfache alte Link-zu-Parent-Repräsentation (dh nur %code% und keine %code% oder %code% ) ist natürlich schneller für Arbeitslasten mit Insert / Update-Auslastung, aber die einzigen Abfragen, die effizient beantwortet werden können sind "Finde die Eltern von X" und "Finde die Kinder von X." Die meisten Workloads beinhalten viel mehr Lesen als Schreiben, daher ist MPTT normalerweise insgesamt schneller - aber vielleicht müssen Sie in Ihrem Fall das Verschieben ("Zurück") zu Link-zu-Eltern verschieben?

    
___
2
Antworten

Speichern von zusammengesetzten Mustern (hierarchische Daten) in der Datenbank

Was sind Best Practices zum Speichern von zusammengesetzten Mustern in einer relationalen Datenbank? Wir haben Modified Preorder Tree Traversal verwendet. Dies ist sehr schnell, um den gesamten Baum zu erstellen, aber es ist sehr langsam, neu...
29.03.2009, 16:42