0

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

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

就我的想象而言,我将有两个“生产者”类型的节点、一个“好”类型的节点和两个“购买量”类型的节点。此外,还有两种类型的关系:“produces”和“needs_to_be_produced”。(我不确定关系标题是否合适)。

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

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

我愿意接受任何建议和更改,但我想将生产的苹果数量保留为一个节点。

谢谢!

4

2 回答 2

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 中一样。

于 2013-09-15T21:31:41.030 回答
0

下面是我的建模方式。我在这里为您设置了测试数据和示例查询

从不同的生产商那里购买了多少特定商品

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

输出

在此处输入图像描述

设计

节点:商品(类型)、交易(数量、日期(月、年))、生产者(名称)

关系:交易针对特定商品的,表明购买来自特定生产者

设置

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
于 2013-09-15T23:34:08.860 回答