T-SQL Tutorial

SQL Server SQL Graph


SQL Graph is a feature introduced in SQL Server 2017 that provides native graph database capabilities within the SQL Server database engine. A graph database is a type of database that stores information as a collection of nodes and edges, rather than in tables as traditional relational databases.

SQL Server's graph data type allows users to create nodes and edges in the database and define relationships between them. Users can then use the SQL Server Transact-SQL (T-SQL) language to query the graph data, using a variety of graph traversal and pattern matching operations.

One advantage of using a graph database in SQL Server is that it allows for more flexible and intuitive data modeling, as well as more efficient querying of complex relationships. Additionally, the graph data type in SQL Server is fully integrated with other data types and features in the database, such as indexing and full-text search.

However, it should be noted that while SQL Server supports the Graph database features, it is not a native Graph database management system like Neo4j or JanusGraph, which are specifically built for handling graph data and its traversals.


When to use a graph database?

A graph database is best suited for applications that require complex relationships between data entities. Some common use cases for graph databases include:
1. Social Networking: Graph databases are well-suited for social networking applications where relationships between individuals are complex and constantly changing.
2. Recommendation Engines: Graph databases can be used to store data about customer behavior and preferences, allowing for personalized recommendations based on their relationship with other customers and items.
3. Fraud Detection: Fraud detection systems often require complex data relationships to be analyzed quickly, and graph databases provide an efficient way to store and analyze such data.


Architecture of SQL Graph

The architecture of SQL Graph in SQL Server includes the following components:
1. Nodes: Nodes represent entities or objects in the graph, such as people, places, or things. Nodes are stored as records in a table.
2. Edges: Edges represent relationships between nodes. Edges are also stored as records in a table and are linked to nodes through unique node IDs.
3. Metadata: Metadata views are used to see attributes of a node or edge table.
4. System Functions: System Functions are used to interact with pseudo columns in graphic tables.
5. Graph Objects: The Graph object is a representation of the graph data, including nodes, edges, and their relationships. Graph objects are Transact-SQL extensions introduced in SQL Server to allow the creation and query of graph objects. Graphical objects are DDL Statements, DML Statements, and Query Statements.


SQL Graph example

Here is an example of how to create a simple graph in a SQL Server database:


-- Create a node table to represent the entities in the graph
CREATE TABLE Employees_G (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(50)
) AS NODE;

-- Create a node table to represent the entities in the graph
CREATE TABLE Departments_G (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
) AS NODE;

-- Create an edge table to represent the relationships between nodes
CREATE TABLE Works_G (work_id INTEGER) AS EDGE;

-- Insert sample data into the node tables
INSERT INTO Employees_G (EmployeeID, EmployeeName)
VALUES (1, 'John Doe'), (2, 'Jane Doe'), (3, 'Jim Smith');

INSERT INTO Departments_G (DepartmentID, DepartmentName)
VALUES (1, 'HR'), (2, 'IT'), (3, 'Marketing');

-- Insert into edge table. While inserting into an edge table,
-- You need to provide the $node_id from $from_id and $to_id columns.
-- Insert which Departments each Employees in Works_G
INSERT INTO Works_G VALUES
((SELECT $node_id FROM Employees_G WHERE EmployeeID = 1),
(SELECT $node_id FROM Departments_G WHERE DepartmentID = 1), 10)
, ((SELECT $node_id FROM Employees_G WHERE EmployeeID = 2),
(SELECT $node_id FROM Departments_G WHERE DepartmentID = 2), 10)
, ((SELECT $node_id FROM Employees_G WHERE EmployeeID = 3),
(SELECT $node_id FROM Departments_G WHERE DepartmentID = 3), 10);

-- Query the graph to see the relationships
SELECT Departments_G.DepartmentName
FROM Employees_G, Works_G, Departments_G
WHERE MATCH (Employees_G-(Works_G)->Departments_G)
AND Employees_G.EmployeeName = 'John Doe';


The above code creates three tables: Employees_G, Departments_G, and Works_G. The Employees_G table represents the employees in the company, the Departments_G table represents the departments in the company, and the Works_G table represents the relationships between employees and departments. The Works_G table acts as an edge table to connect the Employees_G and Departments_G nodes. The last query joins the three tables and returns the name of department.


In conclusion, SQL Graph provides a powerful tool for storing and analyzing complex data relationships in SQL Server databases. It provides a flexible and efficient way to store and query graph data, making it a great choice for applications that require complex relationship analysis.