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 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 服务等)相结合。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函数查找关系图中任意两个节点之间的最短路径,或从给定节点到图中所有其他节点的最短路径。 SHORTEST PATH
还可用于查找可传递闭包或图形中的任意长度遍历。
后续步骤
- 读取 SQL Graph 数据库 - 体系结构
- 若要开始使用 SQL Graph,请参阅 SQL Graph 数据库 - 示例