Wie strukturiere ich ein Modell, um baumartige Daten in relationalen Datenbanken korrekt und effizient darzustellen?

13

Basierend auf dem Durchlaufen von baumähnlichen Daten in einer relationalen Datenbank mithilfe von SQL möchte ich wissen, wie die Art und Weise, wie baumähnliche Daten in relationalen Datenbanken unter Berücksichtigung physikalischer Implikationen regelmäßig beschrieben werden, aussieht.

Ich gehe davon aus, dass das RDBMS keine anderen speziellen Funktionen als reguläres SQL ANSI oder allgemein verfügbare Funktionen hat.

Im Zweifelsfall bin ich immer an MySQL und PostgreSQL und schließlich an SQLite interessiert.

Maniero
quelle

Antworten:

8

Ich glaube, er strebt so etwas wie einen binären Baum an. Ich würde nur drei Schlüssel einfügen, die mit der eindeutigen ID derselben Tabelle verknüpft sind, einen für das linke, einen für das rechte Kind und einen für das Elternteil.

ie- (sehr viel Pseudocode)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id
Patrick
quelle
Eine Überlegung für ein doppelt verknüpftes Element ist, dass jede Änderung der Baumposition unter diesem Schema nicht weniger als 3 Aktualisierungen anstelle von einer ergeben würde. Wie Sie feststellen, ist dies auch eine große Annahme, dass ein binärer Vorwärts- / Rückwärtsbaum angefordert wurde.
REW
In meinen Erfahrungen ziehe ich die Aktualisierungssteuer einer doppelt verknüpften Liste einer einfach verknüpften Liste vor, da ich oft einen Baum überqueren muss. aber in vielen Fällen wäre dies nicht notwendig
Patrick
Das hängt definitiv vom zugrunde liegenden Modell ab. Ich denke, dass die Antwort von Patrick ausreicht, wenn das das richtige Modell ist.
Jcolebrand
6

Wenn jeder Knoten wirklich dieselbe Datenentität ist, bedeutet das Paradigma dennoch eine Tabelle pro Entität und eine Verknüpfungsspalte für die Baumdurchquerung, bei der jeder Knoten nur einmal verknüpft ist.

Für Entitäten, die an mehreren Punkten in der Baumstruktur verknüpft sind, wird eine separate Verknüpfungstabelle oder eine Spalte mit mehreren unterschiedlichen Werten verwendet.

REW
quelle