SQL Server 和 Azure SQL 数据库中的图形处理
适用于: sql Server 2017 (14.x) 及更高版本Azure SQL 数据库 Microsoft Fabric 中的 SQL 数据库Azure SQL 托管实例 SQL 数据库
SQL Server 提供图形数据库功能来对多对多关系建模。 图形关系已集成到 Transact-SQL 中,并受益于将 SQL Server 用作基础数据库管理系统。
什么是图形数据库?
图形数据库是节点(或顶点)和边缘(或关系)的集合。 节点表示实体(例如,某个人或组织),边缘表示该实体连接的两个节点之间的关系(例如,爱好或朋友)。 节点和边缘可能具有与其关联的属性。 下面是使图形数据库独一无二的某些功能:
- 边缘或关系是图形数据库中的第一类实体,可以带有关联的特性或属性。
- 单个边缘可以灵活连接图形数据库中的多个节点。
- 可以轻松表达模式匹配和多跃点导航查询。
- 可以轻松表达传递闭包和多态查询。
何时使用图形数据库
关系数据库可以实现图形数据库可以实现的任何操作。 但是,图形数据库可以更轻松地表达某些类型的查询。 此外,通过特定的优化,某些查询的性能可能更好。 选择关系数据库或图形数据库的决定基于以下因素:
- 应用程序具有分层数据。 HierarchyID 数据类型可用于实现层次结构,但存在一些限制。 例如,它不允许为节点存储多个父级。
- 应用程序具有复杂的多对多关系;随着应用程序的发展,将添加新关系。
- 需要分析互联的数据和关系。
SQL Server 2017 中引入的图形功能(14.x)
SQL Server 2017 中引入了以下功能。
创建图形对象
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 艺术样式语法进行模式匹配。 例如,查找“John”的朋友:
-- 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 服务etc. SQL图)相结合,还支持 SQL Server 提供的所有安全性和符合性功能。
工具和生态系统
受益于 SQL Server 提供的现有工具和生态系统。 诸如备份和还原、导入和导出等工具,BCP 只需现即用即可使用。 其他工具或服务(如 SSIS、SSRS 或 Power BI)使用图形表,只是它们处理关系表的方式。
边缘约束
边缘约束在图形边缘表上定义,并且是给定边缘类型可以连接的节点表对。 边缘约束可帮助开发人员限制给定边缘可以连接的节点类型。
若要详细了解如何创建和使用边缘约束,请参阅 Edge 约束。
合并 DML
MERGE 语句基于与源表联接的结果对目标表执行插入、更新或删除操作。 例如,可以通过根据目标表和源表之间的差异在目标表中插入、更新或删除行来同步两个表。 现在,Azure SQL 数据库和 SQL Server vNext 支持在 MERGE 语句中使用 MATCH 谓词。 也就是说,现在可以使用 MATCH 谓词将当前图形数据(节点或边缘表)与新数据合并,以在单个语句中指定图形关系,而不是单独的 INSERT/UPDATE/DELETE 语句。
若要详细了解如何在合并 DML 中使用匹配,请参阅 MERGE 语句。
最短路径
SHORTEST_PATH函数查找图形中任意两个节点之间的最短路径,或者从给定节点开始到图形中的所有其他节点。 SHORTEST PATH
还可用于查找可传递的闭包或图形中的任意长度遍历。
Fabric SQL 数据库
在 Fabric SQL 数据库中,允许 SQL Graph,但 Node 和 Edge 表不会镜像到 Fabric OneLake。
相关内容
- 读取 SQL Graph 数据库 - 体系结构
- 若要开始使用 SQL Graph,请参阅 SQL Graph 数据库 - 示例