SQL2017 &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表自动生成了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


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值