Come strutturare un modello per rappresentare in modo corretto ed efficiente i dati ad albero su database relazionali?


13

Basandomi sul passaggio di dati simili ad alberi in un database relazionale utilizzando la domanda SQL , vorrei sapere come utilizzare regolarmente il modo di descrivere i dati simili ad alberi su database relazionali considerando le implicazioni fisiche?

Suppongo che l'RDBMS non abbia funzioni speciali per la gestione oltre a normali SQL ANSI o funzionalità comuni disponibili.

Nel dubbio, sono sempre interessato a MySQL, PostgreSQL e infine a SQLite.

Risposte:


8

Credo che stia cercando qualcosa come un albero binario. Includerei solo tre chiavi che sono legate all'ID univoco della stessa tabella, una per la sinistra, una per il figlio destro e una per il genitore.

ie- (molto pseudocodice)

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

Una considerazione per un elemento doppiamente collegato è che qualsiasi modifica nella posizione dell'albero in questo schema comporterebbe non meno di 3 aggiornamenti anziché uno. Come dici tu, questo è anche un grande presupposto che un albero binario avanti / indietro è ciò che è stato richiesto.
— REW

molto vero, nelle mie esperienze preferisco la tassa di aggiornamento di un elenco doppiamente collegato a un elenco singolo collegato poiché spesso devo attraversare un albero. ma in molti casi ciò non sarebbe necessario
— Patrick

Dipende sicuramente dal modello sottostante. Penso che la risposta data da Patrick sia sufficiente se questo è il modello giusto.
— jcolebrand

6

Se ogni nodo è veramente la stessa entità di dati, il paradigma significherebbe comunque una tabella per entità e una colonna di collegamento per l'attraversamento dell'albero in cui ogni nodo è collegato solo una volta.

Per le entità collegate in più punti dell'albero, verrà utilizzata una tabella di collegamento separata o una colonna con più valori distinti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.