http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html bietet einen Algorithmus zum Einfügen und Löschen aus einer Closure Table.
Ich möchte eine ähnliche Datenstruktur modellieren, außer dass Knoten mehrere Eltern haben können.
Gegeben:
Wenn wir entfernen, [B, C]
erwarte ich am Ende:
und wenn wir den Knoten entfernen, B
erwarte ich am Ende Folgendes:
Wenn Sie jedoch den Algorithmus des Autors zum Entfernen von Links oder Knoten verwenden, werden Sie feststellen, dass er [D, C, 1]
zum Löschen markiert wird, was unerwünscht ist.
Was ich bisher versucht habe
Ich habe versucht, die ursprüngliche Datenstruktur anzupassen, indem ich eine references
Spalte hinzugefügt habe , die angibt, wie viele Möglichkeiten es gibt, zwischen zwei Knoten zu reisen. In dem obigen Beispiel können Sie von Reisen A
nach C
entweder durch B
oder durch D
. Die Idee wäre gewesen, dass beim B
Entfernen der Pfad von A
zu C
beibehalten wird und die Referenzanzahl von 2 auf 1 abnimmt. Theoretisch war das nett, aber ich konnte nicht herausfinden, wie die Implementierung funktioniert, und jetzt frage ich mich, ob Es ist überhaupt möglich (die Datenstruktur enthält möglicherweise nicht genügend Informationen, um herauszufinden, welche Zeilen entfernt werden sollen).
Was ich frage
Wie würden Sie Closure Tables anpassen, um mehrere Eltern zu unterstützen? Welche alternativen Datenstrukturen würden Sie empfehlen? https://stackoverflow.com/q/4048151/14731 enthält eine exaustive Liste solcher Datenstrukturen, aber es ist nicht klar, welche mehrere Eltern unterstützen (oder für welche am besten geeignet sind).
references
Spalte?