- Neo4j權威指南 (圖數據庫技術叢書)
- 張幟
- 1162字
- 2020-11-28 15:15:50
2.3 Neo4j圖數據中基本元素與概念
2.3.1 節點
節點(Node)是圖數據庫中的一個基本元素,用以表示一個實體記錄,就像關系數據庫中的一條記錄一樣。在Neo4j中節點可以包含多個屬性(Property)和多個標簽(Label),如圖2-36所示。

圖2-36 帶有屬性和標簽的節點
下面介紹一個最簡單的節點,它只有一個屬性,屬性名是name,屬性值是Tom,如圖2-37所示。

圖2-37 只有屬性的簡單節點
2.3.2 關系
關系(Relationship)同樣是圖數據庫中的基本元素。當數據庫中已經存在節點后,需要將節點連接起來構成圖。關系就是用來連接兩個節點,關系也稱為圖論的邊(Edge),其始端和末端都必須是節點,關系不能指向空也不能從空發起。關系和節點一樣可以包含多個屬性,但關系只能有一個類型(Type),如圖2-38所示;一個節點可以被多個關系指向或作為關系的起始節點,如圖2-39所示多個關系指向同一節點。

圖2-38 帶有類型和屬性的關系

圖2-39 多個關系指向同一節點
關系必須有開始節點(Start node)和結束節點(End node),兩頭都不能為空,如圖2-40所示。

圖2-40 關系的起始節點和結束節點
節點可以被關系串聯或并聯起來,如圖2-41、圖2-42所示。由于關系可以是有方向的,所以可在由節點、關系組成的圖中進行遍歷操作。

圖2-41 關系串聯節點

圖2-42 關系并聯節點
在圖的遍歷操作中我們可以指定關系遍歷的方向或者指定為無方向,因此在創建關系時不必為兩個節點創建相互指向的關系,而是在遍歷時不指定遍歷方向即可。
特別注意一個節點可以存在指向自己的關系,如圖2-43所示。

圖2-43 關系的起始、結束節點為同一節點
2.3.3 屬性
上面提到節點和關系都可以有多個屬性。屬性是由鍵值對組成的,就像Java的哈希表一樣,屬性名類似變量名,屬性值類似變量值。屬性值可以是基本的數據類型,或者由基本數據類型組成的數組。
需要注意的是屬性值沒有null的概念,如果一個屬性不需要了可以直接將整個鍵值對都移除,在使用Cypher或Java API時(詳見“第4章Neo4j程序開發”),可用IS NULL關鍵字判斷屬性是否存在。表2-1列出了Neo4j中屬性值的基本數據類型。
表2-1 屬性值類型

2.3.4 路徑
當使用節點和關系創建了一個圖后,在此圖中任意兩個節點間都是可能存在路徑的,如圖2-44所示。圖中任意兩節點都存在由節點和關系組成的路徑,路徑也有長度的概念,也就是路徑中關系的條數。

圖2-44 路徑
當然也可以說單獨一個節點就可以組成長度為0的路徑,如圖2-45所示。

圖2-45 長度為0的路徑
如果是兩個簡單的節點,中間只存在一條關系,那這條路徑的長度就是1,如圖2-46所示。

圖2-46 長度為1的路徑
2.3.5 遍歷(Traversal)
遍歷一張圖就是按照一定的規則,根據它們之間的關系,依次訪問所有相關聯的節點的操作。
對于遍歷操作不必自己實現,因為Neo4j提供了一套高效的遍歷API,可以指定遍歷規則,然后讓Neo4j自動按照遍歷規則遍歷并返回遍歷的結果。遍歷規則可以是廣度優先,也可以是深度優先。
想對遍歷框架有一個深入的了解,請參見“第3章Neo4j之Cypher”的有關章節;想了解更多的Java代碼范例,請參見“第4章Neo4j程序開發”的有關章節。
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- Raspberry Pi Networking Cookbook(Second Edition)
- Learning Flask Framework
- PySide GUI Application Development(Second Edition)
- Building Minecraft Server Modifications
- Building an RPG with Unity 2018
- 高級語言程序設計(C語言版):基于計算思維能力培養
- INSTANT Yii 1.1 Application Development Starter
- C陷阱與缺陷
- Java自然語言處理(原書第2版)
- Getting Started with Web Components
- SQL Server 2014 Development Essentials
- Java面試一戰到底(基礎卷)
- C語言從入門到精通(微視頻精編版)
- Mobile Test Automation with Appium