SQL 2017 & Azure SQL 新功能:图形数据库

沈云,资深工程师,微软解决方案专家

图形数据库是什么呢?如果从字面理解是进行图形处理的数据库,那么你就错了。

我们先来解释什么是图形数据库。

图形数据库是 NoSQL 数据库的一种类型,它应用图形理论存储实体之间的关系信息。最常见的例子,就是社会网络中人与人之间的关系。关系型数据库用于存储关系型数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。

举个例子:

如图表示人、城市、餐馆三个实体,直接的关系有:人和人谁和谁是朋友的关系,人居住在某个城市的关系,城市和餐馆的关系,人和餐馆的关系。

按照传统做法,可以创建 person,Restaurant ,City 表,创建各种关系表。人与人,任何城市,任何餐馆,城市和餐馆的关系表。

假设我们要查询某人的朋友喜欢的餐馆、居住在同一城市的人喜欢的同一餐馆.....是不是感觉有点晕。感觉即需要关联 n 多张表,还要自我关联。

为了解决这样的问题,业界发明了图形数据库。而 SQL 2017 和 Azure SQL 现在全面支持图形数据库。怎么来实现呢?

见下图:

新的数据表节点(node)表和 edge(边缘表) ,节点表表示数据实体,比如人,城市,餐馆。

边缘表表示实体之间的关系。

第一张图所表示的关系,我们可以用下面代码创建节点表,注意关键词

NODE:

CREATE TABLE Person (ID INTEGER PRIMARY KEY, name VARCHAR(100)) AS NODE;

CREATE TABLE Restaurant (ID INTEGER NOT NULL, name VARCHAR(100), city VARCHAR(100)) AS NODE;

CREATE TABLE City (ID INTEGER PRIMARY KEY, name VARCHAR(100), stateName VARCHAR(100)) AS NODE;`

创建边缘表:

CREATE TABLE likes (rating INTEGER) AS EDGE;

CREATE TABLE friendOf AS EDGE;CREATE TABLE livesIn AS EDGE;

CREATE TABLE locatedIn AS EDGE;

创建好后,可看到数据库表属性下,会有一个图形表出现,node 表和 edge 表表示图标有所不同:

查询数据如下

select * from city

select * from person

select *from livesIn

创建好后,可看到数据库表属性下,会有一个图形表出现,node 表和 edge 表表示图标有所不同:

如图可以看到:node 表自动生成了 node_id 这列,edge 自动生成了 edge_id,from_id,to_id,后面都加上了唯一标识。这列的属性是 nvarchar(1000),事实上每张表系统会生成一个 graph_id_,和其他的系统列,这些列都无法访问,由系统进行管理。见下图:

边缘表表示了实体之间的关系,from to 的关系,如果双向关系,就需要建立两条。下面进行查询是这样的 :

--查找 john 的朋友喜欢的餐馆

SELECT Restaurant.name

FROM Person person1, Person person2, likes, friendOf,

Restaurant

WHERE MATCH(person1-(friendOf)->person2-(likes)->Restaurant)

AND person1.name='John';

-- 查找在同一城市里面喜欢同一餐馆的人

SELECT Person.name FROM Person, likes, Restaurant, livesIn,

City, locatedIn WHERE MATCH (Person-(likes)->Restaurant-

(locatedIn)->City  AND Person-(livesIn)->City);

---注意:使用关键字 Match 进行查询。

通过上面的简单的语句可以实现在关系型模型下,需要非常复杂的关联才能得到的结果。并且 SQL 2017 的图形数据库与数据库引擎完全融合,也就是可以使用比如备份,SSIS ,POWERBI 等各种功能。

在应用上可以分析如:社交关系、犯罪追踪、医疗领域等等。

更多信息请参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/graphs/sql-graph-overview

立即访问http://market.azure.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值