假设我想拥有一个购物者,杂货店和农产品的数据库。例如,比利的杂货店提供胡萝卜和萝卜。爱丽丝的杂货店供应胡萝卜和萝卜。Jinh从Alice's Grocery购买胡萝卜,并从Billy's Grocery购买萝卜。
看起来像“胡萝卜”,“ Jinh”和“ Alice's Grocery”将是三个节点。我了解hyperedge,但是据我了解,它们存在性能问题。将这些节点之一编码为关系(例如,关系“ buys_carrots_from”)似乎是一种反模式。
有没有一种表达这种关系的明智方法(Jinh从Alice's Grocery购买胡萝卜)?还是这种类型的数据不能在图形数据库上很好地转换?
仅具有(:grocery),(:product)和(:consumer)节点
create (Billy_s:grocery{name:"Billy's"})
create (Alice_s:grocery{name:"Alice's"})
create (carrots:product)
create (turnips:product)
create (radishes:product)
create (Jinh:consumer)
您无法将其正确地建模为图形。(我知道我的代码只是伪代码)create (Jinh)-[BUYS]->(carrots)
仅表示Jinh可能从Alice的公司购买胡萝卜。
因此,我们需要一个中介,并且像往常一样,该中介对于存储更多信息非常有用:价格
create (Billy_s_carrots:offer{price:0.45})
create (Billy_s_turnips:offer{price:1.12})
create (Alice_s_carrots:offer{price:0.42})
create (Alice_s_radises:offer{price:1.50})
create (Billy_s)-[:SUPPLIES]->(Billy_s_carrots)-[:WHICH_ARE]->(carrots)
create (Billy_s)-[:SUPPLIES]->(Billy_s_turnips)-[:WHICH_ARE]->->(turnips)
create (Alice_s)-[SUPPLIES]->(Alice_s_carrots)-[:WHICH_ARE]->(carrots)
create (Alice_s)-[SUPPLIES]->(Alice_s_radishes)-[:WHICH_ARE]->(radishes)
现在如果
create (Jinh)-[:DESIRES]->(carrots) // and
create (Jinh)-[:DESIRES]->(turnips)
他/她可以选择省钱
create (Jinh)-[:BUYS]->(Alice_s_carrots) // and
create (Jinh)-[:BUYS]->(Billy_s_turnips)
或节省时间
create (Jinh)-[:BUYS]->(Billy_s_carrots) // and
create (Jinh)-[:BUYS]->(Billy_s_turnips)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句