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
總結
以上是生活随笔為你收集整理的SQL2017 Azure SQL新功能:图形数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python和SQL Server 20
- 下一篇: 腾讯云短信服务使用记录与.NET Cor