这是关于图形数据库设计的一般问题,我找不到更好的问题标题。
我有制片人A和制片人B,他们都生产苹果。我从他们那里买了这些苹果,但从A只买了10,000,从B 20,000买了。 如果我希望将我购买的苹果数量作为节点(而不是关系属性),如何在图形数据库中绘制它?
据我所知,我有两个类型为“Producer”的节点,一个类型为“Good”的节点,以及两个类型为“Buying Amount”的节点。另外,存在两种类型的关系:“产生”和“需要产生”。 (我不确定关系标题是否适合)。
这是一张图:http://img198.imageshack.us/img198/3964/4klk.png
这里的问题是:我从哪里知道生产者A或B是否需要为我生产10,000个苹果?
我对任何提案和更改持开放态度,但我希望将生产的苹果数量保留为节点。
谢谢!
答案 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
<强>输出强>
<强>设计强>
节点:商品(类型),交易(数量,日期(月,年)),制作人(姓名)
关系:交易适用于特定的商品,表示购买的商品来自特定生产商
<强>设置强>
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