如何在图中实现具有多个入站和多个出站关系的节点

时间:2013-09-15 17:19:55

标签: neo4j graph-databases

这是关于图形数据库设计的一般问题,我找不到更好的问题标题。

我有制片人A和制片人B,他们都生产苹果。我从他们那里买了这些苹果,但从A只买了10,000,从B 20,000买了。 如果我希望将我购买的苹果数量作为节点(而不是关系属性),如何在图形数据库中绘制它?

据我所知,我有两个类型为“Producer”的节点,一个类型为“Good”的节点,以及两个类型为“Buying Amount”的节点。另外,存在两种类型的关系:“产生”和“需要产生”。 (我不确定关系标题是否适合)。

这是一张图:http://img198.imageshack.us/img198/3964/4klk.png

这里的问题是:我从哪里知道生产者A或B是否需要为我生产10,000个苹果?

我对任何提案和更改持开放态度,但我希望将生产的苹果数量保留为节点。

谢谢!

2 个答案:

答案 0 :(得分:0)

我会介绍另一种节点类型,我们称之为“购买”(虽然我不确定最佳名称是什么,但需要有关您的用例的更多详细信息)。

(Producer A)-[:PRODUCES]->(Purchase X)
(Producer B)-[:PRODUCES]->(Purchase Y)
(Purchase X)-[:IS_FOR_PRODUCT]->(Apple)
(Purchase Y)-[:IS_FOR_PRODUCT]->(Apple)
(Purchase X)-[:IS_FOR_AMOUNT]->(10,000)
(Purchase Y)-[:IS_FOR_AMOUNT]->(20,000)

我希望语法清晰,()是节点和 - [:] - >被命名为有向关系,如Cypher。

答案 1 :(得分:0)

以下是我的建模方式。我已经设置了test data and sample query for you here

从各种生产商处购买了多少特定商品

MATCH t:Transaction-[:FOR]->g:Goods, t-[:FROM]->producer WHERE g.type='Apples' RETURN producer, t.quantity, t.month+"-"+t.year AS Date

<强>输出

enter image description here

<强>设计

节点:商品(类型),交易(数量,日期(月,年)),制作人(姓名)

关系交易适用于特定的商品,表示购买的商品来自特定生产商

<强>设置

CREATE (producerA:Producer {name:'A'})
CREATE (producerB:Producer {name:'B'})
CREATE (apples:Goods {type:'Apples'})
CREATE producerA-[:PRODUCES]->apples
CREATE producerB-[:PRODUCES]->apples
CREATE (trans1:Transaction {month:'08', year:'2014', quantity:'10000'})-[:FOR]->apples
CREATE trans1-[:FROM]->producerA
CREATE (trans2:Transaction {month:'08', year:'2014', quantity:'20000'})-[:FOR]->apples
CREATE trans2-[:FROM]->producerB