Elaborazione di grafi con SQL Server e il database SQL di Azure

Si applica a: SQL Server 2017 (14.x) e versioni successive Istanza gestita di SQL di Azure di Azure

SQL Server offre funzionalità di database a grafo per modellare relazioni molti-a-molti. Le relazioni del grafo sono integrate in Transact-SQL e ricevono i vantaggi dell'uso di SQL Server come sistema di gestione di database di base.

Cos'è un database a grafo?

Un database a grafo è una raccolta di nodi (o vertici) e archi (o relazioni). Un nodo rappresenta un'entità (ad esempio, una persona o un'organizzazione) e un arco rappresenta una relazione tra i due nodi che collega (ad esempio, mi piace o amici). A entrambi i nodi e i bordi possono essere associate proprietà. Ecco alcune funzionalità che rendono univoco un database a grafo:

  • Gli archi o relazioni sono entità di prima classe in un Database a grafo e possono avere attributi o proprietà associate ad essi.
  • Un singolo arco può collegare in modo flessibile più nodi in un Database a grafo.
  • È possibile esprimere facilmente criteri di ricerca e query di navigazione a più hop.
  • È possibile esprimere facilmente chiusura transitiva e query polimorfiche.

Quando usare un database a grafo

Un database relazionale può ottenere qualsiasi elemento che può essere un database a grafo. Tuttavia, un database a grafo semplifica l'espressione di determinati tipi di query. Inoltre, con ottimizzazioni specifiche, alcune query possono offrire prestazioni migliori. La decisione di scegliere un database relazionale o a grafo si basa sui fattori seguenti:

  • L'applicazione dispone di dati gerarchici. Il tipo di dati HierarchyID può essere usato per implementare gerarchie, ma presenta alcune limitazioni. Ad esempio, non consente di archiviare più elementi padre per un nodo.
  • L'applicazione ha relazioni molti-a-molti complesse; man mano che l'applicazione evolve, vengono aggiunte nuove relazioni.
  • È necessario analizzare relazioni e dati interconnessi.

Funzionalità di Graph introdotte in SQL Server 2017 (14.x)

In SQL Server 2017 sono state introdotte le funzionalità seguenti.

Creare oggetti grafico

Le estensioni Transact-SQL consentono agli utenti di creare tabelle perimetrali o nodi. A entrambi i nodi e i bordi possono essere associate proprietà. Poiché i nodi e i bordi vengono archiviati come tabelle, tutte le operazioni supportate nelle tabelle relazionali sono supportate nella tabella dei nodi o dei bordi. Ecco un esempio:

CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;

Il diagramma seguente mostra come i nodi e gli archi vengono archiviati come tabelle.

Diagram showing the Nodes and Edges are stored as tables.

Estensioni del linguaggio di query

La nuova MATCH clausola è stata introdotta per supportare la ricerca di criteri di ricerca e lo spostamento multi hop tramite il grafico. La MATCH funzione usa la sintassi dello stile ASCII per la ricerca di criteri di ricerca. Ad esempio, per trovare amici di "John":

-- Find friends of John
SELECT Person2.Name 
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';

Completamente integrato nel motore di database di SQL Server

Le estensioni graph sono completamente integrate nel motore di SQL Server. Usare lo stesso motore di archiviazione, metadati, Query Processor e così via per archiviare ed eseguire query sui dati del grafo. Eseguire query su un grafico e dati relazionali in una singola query. La combinazione di funzionalità del grafo con altre tecnologie di SQL Server, ad esempio indici columnstore, disponibilità elevata, servizi R e così via. Il grafico SQL supporta anche tutte le funzionalità di sicurezza e conformità disponibili con SQL Server.

Strumenti ed ecosistema

Sfruttare gli strumenti e l'ecosistema esistenti offerti da SQL Server. Strumenti come il backup e il ripristino, l'importazione e l'esportazione, BCP funziona solo fuori uso. Altri strumenti o servizi come SSIS, SSRS o Power BI funzionano con le tabelle a grafo, proprio come funzionano con le tabelle relazionali.

Vincoli di arco

Un vincolo di arco viene definito in una tabella dei bordi del grafo ed è una coppia di tabelle dei nodi che un determinato tipo di arco può connettersi. I vincoli di arco consentono agli sviluppatori di limitare il tipo di nodi che possono connettersi a un determinato arco.

Per altre informazioni su come creare e usare vincoli di arco, vedere Vincoli di arco.

Unisci DML

L'istruzione MERGE esegue operazioni di inserimento, aggiornamento o eliminazione in una tabella di destinazione in base ai risultati di un join con una tabella di origine. Ad esempio, è possibile sincronizzare due tabelle inserendo, aggiornando o eliminando righe in una tabella di destinazione in base alle differenze tra la tabella di destinazione e la tabella di origine. L'uso dei predicati MATCH in un'istruzione MERGE è ora supportato nel database SQL di Azure e in SQL Server vNext. Ciò significa che è ora possibile unire i dati correnti del grafo (tabelle node o edge) con i nuovi dati usando i predicati MATCH per specificare le relazioni del grafo in un'unica istruzione, anziché istruzioni INSERT/UPDATE/DELETE separate.

Per altre informazioni su come usare la corrispondenza in un linguaggio DML di merge, vedere Istruzione MERGE.

Percorso più breve

La funzione SHORTEST_PATH trova il percorso più breve tra due nodi in un grafo o a partire da un determinato nodo a tutti gli altri nodi del grafico. SHORTEST PATH può essere usato anche per trovare una chiusura transitiva o per attraversamenti arbitrari di lunghezza nel grafico.

Passaggi successivi