【问题标题】:Recommended Modeling in a graph database图数据库中的推荐建模
【发布时间】:2016-02-13 16:42:48
【问题描述】:

我是图形数据库领域的新手,想知道以下经典产品买卖关系场景的推荐建模选项:

  • 史蒂夫从亚马逊购买了 iPhone 6 Plus

    CREATE (Steve:Person {name: "Steve"})-[b1:BOUGHT]->(iPhone:Product {name: "iPhone 6 Plus"})

  • 迈克尔随后也购买了 iPhone 6 Plus,但来自 eBay

    CREATE (Michael:Person {name: "Michael"})-[b2:BOUGHT]->(iPhone)


因此,亚马逊和 eBay 都销售 iPhone 6 Plus,而史蒂夫和迈克尔都购买了它。
CLICK TO VIEW ILLUSTRATED MODEL WITH THE PRODUCT NODE
问题: 这个合并模型存在一个问题,因为节点“iPhone 6 Plus”是共享的,所以不清楚 Steve 或 Michael 是从哪家公司购买 iPhone 6 Plus。

建模可以简化为:

CREATE (Steve:Person {name: "Steve"})-[b1:BOUGHT_FROM {product: "iPhone 6 Plus"}]->(Amazon:Company {name: "Amazon"})
CREATE (Michael:Person {name: "Michael"})-[b2:BOUGHT_FROM {product: "iPhone 6 Plus"}]->(eBay:Company {name: "eBay"})


CLICK TO VIEW ILLUSTRATED MODEL WITHOUT THE PRODUCT NODE
导致丢失“iPhone 6 Plus”节点并用将细节嵌入关系属性本身的方法取而代之,但同时允许史蒂夫和亚马逊之间建立直接关系。

在史蒂夫从亚马逊购买 iPhone 和迈克尔从 eBay 购买 iPhone 并同时保留 iPhone 节点的情况下,有没有办法保持清晰的信息?

【问题讨论】:

    标签: neo4j graph-databases


    【解决方案1】:

    作为一个简单的选项,您可以添加一个与销售Company 相关的Purchase 节点以及从该公司购买的一个或多个Products

    以下说明的是数据模型,而不是任何 Cypher 子句。

    • 史蒂夫从亚马逊购买了 iPhone 6 Plus

      (:Person {name: "Steve"})-[:BOUGHT]->(p:Purchase {id:987, total: 655.99, tax: 56.00})
      (p)-[:PRODUCT {price: 599.99}]->(iPhone:Product {name: "iPhone 6 Plus"})
      (p)-[:SELLER]->(:Company {name: "Amazon"})
      
    • 迈克尔随后也购买了 iPhone 6 Plus,但来自 eBay

      (:Person {name: "Michael"})-[:BOUGHT]->(p:Purchase {id:456, total: 599.99, tax: 0.00}})
      (p)-[:PRODUCT {price: 599.99}]->(iPhone:Product {name: "iPhone 6 Plus"})
      (p)-[:SELLER]->(:Company {name: "eBay"})
      

    购买Steve 的实际查询可能如下所示:

    MERGE (person:Person {name: "Steve"})
    MERGE (prod:Product {name: "iPhone 6 Plus"})
    MERGE (co:Company {name: "Amazon"})
    CREATE
      (person)-[:BOUGHT]->(p:Purchase {id:987, total: 655.99, tax: 56.00}),
      (p)-[:PRODUCT {price: 599.99}]->(prod),
      (p)-[:SELLER]->(co);
    

    【讨论】:

    • 这个模型的瓶颈在于它不能表明亚马逊销售的产品 iPhone 除非是字面上被史蒂夫买的
    • 这不是问题,因为您仍然可以从亚马逊(和 eBay)与同一个 iPhone 产品建立销售关系。但我的回答也可能不代表您要使用的实际模型,因为您必须考虑所有用例。
    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多