elenco collegato in SQL e alberi


8

Sebbene SQL sia più associato a operazioni simili a tabelle e non tanto a ricorsive, supponiamo che vorremmo implementare il concetto di elenco collegato (o doppio-collegato) (come abbiamo ad esempio in C).
Esiste un modo per farlo in modo efficiente, considerando che possiamo avere elementi che si spostano da qualsiasi luogo in qualsiasi luogo in un elenco collegato?
Qualche soluzione utilizzando CLR?
O è davvero qualcosa che non dovrebbe mai essere portato a SQL Server?

Si noti che questa domanda si è evoluta anche in una discussione tra liste VS alberi

Anche se ho bloccato SQL Server, questa è una domanda accademica, quindi una soluzione in qualsiasi altra è buona, anche se arriviamo alla conclusione che questo è qualcosa che non dovrebbe mai essere portato nel database.

Risposte:


10

Un elenco collegato è solo un grafico aciclico diretto molto semplice. Non vi è alcun motivo per cui ciò sia in qualche modo difficile o debba essere evitato per SQL Server.

Pensaci, le strutture ad albero sono più complesse degli elenchi collegati. Ogni implementazione di un forum su Internet che memorizza i dati in un database relazionale ha implementato le basi di un elenco collegato. In questa stessa pagina, le risposte formano un elenco collegato. Possono essere aggiunti ed eliminati. Possono essere spostati in posizione (aka, classificati in base ai voti).

La rappresentazione particolare da utilizzare dipende solo dai compromessi che si desidera effettuare tra la gestione dell'elenco (inserimento, aggiornamento, eliminazione) e il recupero.

--Works great for INS/UPD/DEL, In order retrieval isn't the best.
CREATE TABLE Item (id int identity, next int, prev int) 

--makes in order retrieval fast, deletes are a problem, inserts may require re-numbering.    
CREATE TABLE Item (id int identity, position  int ) 

--Works great for in-order retrieval, and allow cheap insertion/deletion, 
--certain edge cases might be tricky to handle.
CREATE TABLE (id int identity, position Decimal(24,12 )  ) 
--for inserts, use the average of the before and after, for deletes, just delete.

Aggiornamento: la domanda riguarda gli alberi e gli elenchi collegati nel server SQL

SQL Server ha il tipo di dati HierarchyId progettato per facilitare l'implementazione e l'interrogazione di strutture ad albero.

CREATE TABLE Item (id int identity, NodeId HierarchyId)
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.