Marco Russo

.NET, Business Intelligence e dintorni

Corsi

Miei blog in inglese

Alberi e gerarchie in SQL

In questi giorni sto partecipando a SQL Pass 2006 a Seattle. Non ho tempo di fare un ampio reportage anche perché non ci sono moltissime novità: per una volta si possono fare un po' di approfondimenti con calma e si sfrutta la presenza di un ampio numero di persone dei team di sviluppo (siamo a 20 minuti d'auto da Redmond) per chiedere conto di bug, feature future e così via.

Fatta questa premessa, c'è una sessione oggi che ho trovato molto interessante.
Joe Celko ha presentato una sessione che riassume i concetti fondamentali del libro Trees and Hierarchies in SQL for Smarties: una delle idee è che la modellizzazione classica di una gerarchia in un modello relazionale (campo Parent che fa riferimento alla chiave primaria della tabella stessa - la stessa tecnica usata nella tabella Employees di Northwind, per capirci) male si sposa con un database relazionale, visto che obbliga all'uso di cursori o di query ricorsive (che è poi quasi come usare i cursori). L'alternativa proposta è la rappresentazione attraverso insiemi (nested set) usando una notazione che offre dei vantaggi enormi in termini di navigazione, rendendo un po' più costosi gli aggiornamenti, ma meno di quanto si potrebbe immaginare al primo impatto.

La sessione è stata interessante anche per altri motivi: Joe Celko è un vero personaggio (era vestito esattamente come nella foto e in tanti anni in una conferenza americana non avevo ancora visto uno speaker con abito sartoriale, gilet e camicia bianca con gemelli - ciò fa parte della sua figura carismatica, devo dire) e la sessione era finita dopo meno di 40 minuti, ma i 30 minuti successivi di domande e risposte sono stati se possibile ancora più interessanti perché ha toccato vari temi tra cui le problematiche di analisi temporale, suggerendo la lettura dei lavori di Richard Snodgrass della University of Arizona, in particolare del libro Developing Time-Oriented Database Applications in SQL che è disponibile in forma gratuita in PDF (tutti i link sono sulla pagina delle sue pubblicazioni).

Se volete prendervi una pausa dai problemi di versioni, patch, hotfix, feature e volete pensare a un livello più alto... sono tutte letture consigliate.

Comments

Gianluca Hotz said:

Ciao Marco,
visto che hai trovato interessante la rappresentazione tramite i "nested sets", e non so se Celko ne ha parlato, ti segnalo questi articoli di Tropashko che generalizzano la tecnica per essere utilizzata con i numeri reali/razionali riducendo i problemi di aggiornamento:

http://www.dbazine.com/oracle/or-articles/tropashko4

http://www.dbazine.com/oracle/or-articles/tropashko5

http://arxiv.org/html/cs.DB/0401014

http://www.sigmod.org/sigmod/record/issues/0506/p47-article-tropashko.pdf
# novembre 24, 2006 12.34

marco said:

Non ho ancora letto il libro completo, Celko non ne ha fatto cenno. Grazie per i link!
Marco
# novembre 26, 2006 3.58

faser said:

Con Oracle la gestione di alberi in SQL è però decisamente semplificata dalla sintassi CONNECT BY
es:
SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;
http://faser.net/public/snippets/sql/ora_hierarchy.html
# dicembre 29, 2006 2.47