是的,您可以使用任一 DBMS。
为了帮助您做出决定,这是一个如何在 neo4j 中支持您的用例的示例。
创建示例数据:
CREATE
(a:Foo {id: 'A'}), (b:Foo {id: 'B'}), (c:Box {id: 123}),
(h1:Height {value: 1}), (w4:Weight {value: 4}),
(a)-[:HAS_HEIGHT {factor: 1, offset: 0}]->(h1),
(a)-[:HAS_WEIGHT {factor: 1, offset: 2}]->(w4),
(b)-[:HAS_WEIGHT {factor: 1, offset: 0}]->(w4),
(b)-[:HAS_HEIGHT {factor: 1, offset: 3}]->(h1),
(c)-[:CONTAINS {count: 5}]->(a),
(c)-[:CONTAINS {count: 2}]->(b);
“A”和“B”由Foo 节点表示,“C”由Box 节点表示。由于给定的身高或体重可以被多个节点引用,因此此示例数据模型使用共享的Weight 和Height 节点。 HAS_HEIGHT 和 HAS_WEIGHT 关系具有 factor 和 offset 属性,以允许调整特定 Foo 节点的高度或重量。
查询“A的高度是多少”:
MATCH (:Foo {id: 'A'})-[ra:HAS_HEIGHT]->(ha:Height)
RETURN ra.factor * ha.value + ra.offset AS height;
查询“A和B的高度比是多少”:
MATCH
(:Foo {id: 'A'})-[ra:HAS_HEIGHT]->(ha:Height),
(:Foo {id: 'B'})-[rb:HAS_HEIGHT]->(hb:Height)
RETURN
TOFLOAT(ra.factor * ha.value + ra.offset) /
(rb.factor * hb.value + rb.offset) AS ratio;
注意:上面使用了TOFLOAT(),以确保从不使用会截断的整数除法。
查询“C中出现的对象的总重量是多少”:
MATCH (:Box {id: 123})-[c:CONTAINS]->()-[rx:HAS_WEIGHT]->(wx:Weight)
RETURN SUM(c.count * (rx.factor * wx.value + rx.offset));