首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphDB:节点作为关系的属性

GraphDB:节点作为关系的属性
EN

Stack Overflow用户
提问于 2020-04-23 19:17:24
回答 2查看 289关注 0票数 2

我试图将graphDB作为问题域的关系数据库管理系统的替代方案进行分析。下面是我正试图解决的一个问题的类比。

P:MichaelP:Angela r:like_to_eat G:AppleG:coder:available_in G:苹果和G:面包是:沃尔玛和S:Whole 。到目前为止还是很简单的。这是一幅我认为最能表达这张图的图片。

问题是当我试图明确安琪拉喜欢全食苹果和沃尔玛面包的时候。迈克尔喜欢吃沃尔玛的苹果和全食的面包。我怎么能用图表来表示这样的东西呢?听起来我需要超图的概念才能解决这个问题,但我也听说过,任何超图问题也可以用属性图来解决。这能用Neo4j或CosmosDB这样的标准图形解决方案解决吗?有人能帮我一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-23 19:28:15

您可以在一个Person节点(比方说)中“具体化”PersonGroceryStore之间的3路关系,从而形成如下数据模型:

在neo4j中,您可以使用这个Cypher查询来表示“安吉拉喜欢全食苹果和沃尔玛面包”:

代码语言:javascript
复制
MERGE (angela:Person {name: 'Angela'})
MERGE (apple:Grocery {name: 'Apple'})
MERGE (bread:Grocery {name: 'Bread'})
MERGE (wf:Store {name: 'Whole Foods'})
MERGE (wm:Store {name: 'Walmart'})
CREATE
  (angela)-[:LIKES]->(pref1:Preference),
  (pref1)-[:ITEM]->(apple),
  (pref1)-[:AT_STORE]->(wf),
  (angela)-[:LIKES]->(pref2:Preference),
  (pref2)-[:ITEM]->(bread),
  (pref2)-[:AT_STORE]->(wm)
票数 2
EN

Stack Overflow用户

发布于 2020-04-26 07:14:12

另一种选择是将“安琪拉喜欢吃苹果”中的“全食”表示为“喜欢吃”的属性,这将成为一个真实的“财产图”。以下是数据模型:

在NebulaGraph(这是一个图形数据库段式)中,您可以使用以下nGQL查询进行建模:

代码语言:javascript
复制
// Define the schema
create tag person(name string)
create tag grocery(name string)
create tag store(name string)
create edge likes(storeID int)
create edge sells()

// Insert the vertices
INSERT VERTEX person(name) VALUES 100:("Michael");
INSERT VERTEX person(name) VALUES 101:("Angela");
INSERT VERTEX grocery(name) VALUES 200:("Apple");
INSERT VERTEX grocery(name) VALUES 201:("Bread");
INSERT VERTEX store(name) VALUES 300:("Walmart");
INSERT VERTEX store(name) VALUES 301:("Whole Foods");


// Insert the edges
INSERT EDGE likes(storeID) VALUES 101->200:(301);
INSERT EDGE likes(storeID) VALUES 101->201:(300);
INSERT EDGE sells() VALUES 300->200:();
INSERT EDGE sells() VALUES 300->201:();
INSERT EDGE sells() VALUES 301->200:();
INSERT EDGE sells() VALUES 301->201:();

找出安吉拉喜欢哪个商店的苹果

代码语言:javascript
复制
> GO FROM 101 OVER likes where likes._dst==200 YIELD likes.storeID as storeID | FETCH PROP ON store $-.storeID

找出安吉拉在沃尔玛喜欢多少杂货

代码语言:javascript
复制
> GO FROM 101 OVER likes WHERE likes.storeID = 300

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61395285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档