属性图模型 Property Graph Diagram

Property Graph Diagram (属性图) 与前一篇文章一样是一种针对概念的建模图,他的设计方式与上一篇很像,而且也易於理解他的用法,请参考下图。

https://ithelp.ithome.com.tw/upload/images/20210922/20092753dkGmff8Hti.jpg

基本的属性图中,最基础的元素有几个: 有向箭头连接线的关系说明属性节点,基本上这个图就是一个 有向无环图 [2]。

若更进一步细分,每一个属性都可以描述他们有的资料结构,像是下图:

https://ithelp.ithome.com.tw/upload/images/20210922/20092753DmoRtVNSeg.png

** _id (Identity)** 类的文字,在图中是使用斜体表示, unique(唯一) 类的文字,在图中是使用粗体来表示。

对於复杂的结构 (见下图) [3],这一种画法可以用来呈现非属性细节的关系 (这里没有列出每个属性内的资料结构),描述资料 Entity 本身有哪些方法,就可以使用 has …, 对於 type of 则是一种继承关系 (比方说通讯设备是一种设备),对於 has effect on 则是会受到某个东西的影响 (主从关系不一样)

https://ithelp.ithome.com.tw/upload/images/20210922/20092753cWXKAMujUK.png

Graph Query Language

顺道介绍: Graph Query Language in SQL (GQL);这是补足在 SQL 内可以查询图结构的语言,关於目前图、树的结构查询在 SQL Antipatterns: Avoiding the Pitfalls of Database Programming 这本书有提供一些范例和解释说明,值得参考。

GQL 不是指 GraphQL,这是近年来被定义出一个特定於 (图) 的查询语言 [5],此时的图不是 Diagram,是图论的图,这个语言的功能与 SQL 是互补的,可以直接在 SQL 使用 GQL 的查询方式,像是下图:

https://ithelp.ithome.com.tw/upload/images/20210922/20092753oLUniRKHZX.png

其中红色的 MATCH 这块语法都是 Pattern matching 的 fragment,用来查图结构的资料,然後把结果透过绿色区域的 COLUMNS 回传回去。

对於 [5] 文献的解释来说,SQL 构成资料表,而 GQL 构成图 (再次声明是图论的图),GQL 可以用来表示离散复杂的资料物件。

顺带一提,Neo4j 提议了一个写法,用於建立整个图的模式:

https://ithelp.ithome.com.tw/upload/images/20210922/20092753xjuOyQfRcc.png

API Endpoint: GraphQL

对 GraphQL 来说,正巧遇到了概念图使用的地方,那就是可以建构一整个 GraphQL 复杂的查询结构,比方说这是 GraphQL 的一个电子邮件资料模型:

https://ithelp.ithome.com.tw/upload/images/20210922/200927531jUMTCVNHg.png

对於使用属性图於 GraphQL 的细节请参考 [11]。

建模核心理念指南

Neo4j 写了一份 Graph Modeling Guidelines 的建模指南,欢迎参考 [9]。

我在找资料时找到了 [8] 这张对比图,图中用 UML, 物件图来比较属性图的画法。

这篇文章没有特别叙述要用什麽理念方法建立一个属性图,而是了解属性图的元素和说明,需要深入了解的话,References 的资料应该是足够的。

References:
[1] http://graphdatamodeling.com/Graph%20Data%20Modeling/GraphDataModeling/page/PropertyGraphs.html
[2] https://zh.wikipedia.org/wiki/%E6%9C%89%E5%90%91%E6%97%A0%E7%8E%AF%E5%9B%BE
[3] https://online.visual-paradigm.com/drive/#diagramlist:proj=0&new
[4] https://www.dataversity.net/property-graphs-swiss-army-knife-data-modeling/#
[5] https://www.linkedin.com/pulse/sql-now-gql-alastair-green/?trackingId=JHusYOenSoa23wu2xoAOvw%3D%3D
[6] https://www.dataversity.net/what-is-a-property-graph/#
[7] https://www.researchgate.net/figure/An-example-of-property-graph_fig1_312721340
[8] https://www.researchgate.net/figure/mapping-between-UML-class-diagrams-and-property-graphs_fig1_267705483
[9] https://neo4j.com/developer/guide-data-modeling/
[10] http://graphdatamodeling.com/Graph%20Data%20Modeling/GraphDataModeling/GraphDataModelingExplained.html
[11] http://graphdatamodeling.com/Graph%20Data%20Modeling/GraphQL/GraphQL.html


<<:  Day7-JDK查看正在运行的Java进程工具:jps

>>:  Day 22 - SwiftUI开发实作1 (简易计算机)

Day 20 K-近邻演算法(KNN)

介绍完决策树和随机森林後,今天来介绍的是 K-近邻演算法(k-nearest neighbor cl...

Day 23:Ansible 的基本介绍

昨天差不多讲完这几天的目标了,今天就来简单介绍 Ansible 这套自动化工具吧。顺便帮我争取一点写...

表单攻略前准备

这需要一个完整的例子。 我先依照先前讲的把程序码先准备好 先看画面 准备了两个页面: User, U...

Day22:[排序演算法]Merge sort - 合并排序法

Merge Sort采用分治法(Divide and Conquer)的方式来处理排序的问题,简单...

Day20 Laravel - test

在Day19时搭配RESTful API风格的CRUD做出了一个留言板的功能,但也发现到了每次要确认...