SQL Server 和 Azure SQL 数据库中的图形处理
适用于: SQL Server 2017 (14.x) 及更高版本
Azure SQL 数据库
Azure SQL 托管实例
SQL Server提供图形数据库功能来为多对多关系建模。 图形关系集成到 Transact-SQL 中,并获得了使用 SQL Server 作为基础数据库管理系统的好处。
什么是图形数据库?
图数据库是节点(或顶点)和边缘(或关系)的集合。 节点表示实体(例如,某个人或组织),边缘表示该实体连接的两个节点之间的关系(例如,爱好或朋友)。 节点和边缘都可以具有与之关联的属性。 下面是使图形数据库独一无二的某些功能:
- 边缘或关系是图形数据库中的第一类实体,可以带有关联的特性或属性。
- 单个边缘可以灵活连接图形数据库中的多个节点。
- 可以轻松表达模式匹配和多跃点导航查询。
- 可以轻松表达传递闭包和多态查询。
何时使用图形数据库
关系数据库可以实现图形数据库所能实现的一切。 但是,图形数据库可以更轻松地表达某些类型的查询。 此外,通过特定的优化,某些查询的性能可能更好。 选择关系数据库或图形数据库取决于以下因素:
- 应用程序具有分层数据。 HierarchyID 数据类型可用于实现层次结构,但它有一些限制。 例如,它不允许为一个节点存储多个父级。
- 应用程序具有复杂的多对多关系;随着应用程序的发展,会添加新的关系。
- 需要分析互联的数据和关系。
SQL Server 2017 (14.x) 中引入的图形功能
我们开始向SQL Server添加图形扩展,以便更轻松地存储和查询图形数据。 第一个版本中引入了以下功能。
创建图形对象
Transact-SQL 扩展将允许用户创建节点表或边缘表。 节点和边缘都可以具有关联的属性。 由于节点和边缘存储为表,因此节点或边缘表支持关系表上支持的所有操作。 以下是示例:
CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;
节点和边缘存储为表
查询语言扩展
引入了新 MATCH
子句以支持模式匹配和通过图形进行多跃点导航。 函数 MATCH
使用 ASCII 艺术样式语法进行模式匹配。 例如:
-- Find friends of John
SELECT Person2.Name
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';
完全集成到 SQL Server 引擎中
图形扩展完全集成到SQL Server引擎中。 使用相同的存储引擎、元数据、查询处理器等。用于存储和查询图形数据。 在单个查询中跨图形和关系数据进行查询。 将图形功能与其他SQL Server技术(如列存储、HA、R 服务等)相结合。SQL 图形数据库还支持 SQL Server 提供的所有安全性和合规性功能。
工具和生态系统
受益于SQL Server提供的现有工具和生态系统。 备份和还原、导入和导出、BCP 等工具现成即可使用。 其他工具或服务(如 SSIS、SSRS 或 Power BI)将处理图形表,就像它们处理关系表的方式一样。
边缘约束
边缘约束在图形边缘表上定义,是给定边缘类型可以连接的一对节点表 () 。 这使用户可以更好地控制其图形架构。 借助边缘约束,用户可以限制允许给定边缘连接的节点类型。
若要详细了解如何创建和使用边缘约束,请参阅 边缘约束
合并 DML
MERGE 语句基于与源表的联接结果对目标表执行插入、更新或删除操作。 例如,可以根据目标表和源表之间的差异,通过插入、更新或删除目标表中的行来同步两个表。 Azure SQL Database 和 SQL Server vNext 现在支持在 MERGE 语句中使用 MATCH 谓词。 也就是说,现在可以使用 MATCH 谓词在单个语句中指定图形关系,而不是单独的 INSERT/UPDATE/DELETE 语句,将当前图形数据 (节点或边缘表与新数据合并) 。
若要详细了解如何在合并 DML 中使用 match,请参阅 MERGE 语句
最短路径
SHORTEST_PATH函数查找图中任意 2 个节点之间的最短路径,或从给定节点到图中所有其他节点的最短路径。 最短路径还可用于在图中查找可传递闭包或任意长度遍历。