【问题标题】:Neo4j Database modeling for Multi Level Marketing用于多层次营销的 Neo4j 数据库建模
【发布时间】:2014-06-28 09:45:28
【问题描述】:

我正在尝试为 neo4j 数据库建模图形数据库。详情如下:

代理商 - 产品 - 排名 - 佣金。

会有代理。 会有产品(比如保健品)。

一个代理将加入另一个代理或可以直接加入。 一个代理只能有一个父级,但可以有多个子级。 在其他代理下加入代理的广度和深度没有限制。

代理商将被提升,排名取决于他们购买的产品的总价值。 代理商按月获得佣金,这取决于他们和他们的孩子在一个月内购买的产品的总价值。

节点:代理{名称,年龄,...,等级} A1、A2、A3...

节点:产品{名称,描述,...,价格} P1、P2、P3...

关系:购买{日期、时间、数量、总付款}

(代理)-[:purchases]->(产品)

代理可以一次购买多个产品。 代理可以多次购买同一产品。

示例:

A1{ 'John Doe', '34', ..., '4' }

P1{ 'Px1', 'desx1', ..., '$2.3' }

A1 -[ :purchases { 03-01-2014, 09.30, 02, '$4.6' } ]-> ( P1 )

A1 -[ :purchases { 07-01-2014, 13.45, 01, '$2.3' } ]-> ( P1 )

?这就是我卡住的地方。所以,在这里我需要创建一个关系 [:purchases] 每次代理商购买产品,即使是同一种产品?

在这种情况下,同一两个节点之间具有相同类型和标签的多重关系是否有效?因为代理商可能会经常购买相同的产品,这将创造一个更大的数字。相同节点之间的多个关系。

这个模型是否遵循标准的建模原则? 谁能提出更好的建模或更正方法?

【问题讨论】:

    标签: neo4j modeling graph-databases


    【解决方案1】:

    正如 Stefan 建议的那样,我将引入与产品有关系的 Purchase 节点,并将购买值存储在该节点中。这样您就可以将查询限制为购买,而无需深入了解产品。

    (:Agent)-[:made]->(:Purchase {date: XXX, value: XXX})-[:HAS]->(:Product)
    

    假设我们有一个关系 :WORKS_FOR 将子代理与其父母联系起来:

    (a1:Agent)-[:WORKS_FOR]->(a2:Agent)
    

    这个简单的查询将为您提供每个代理自己完成的购买总和,而不考虑他/她的孩子:

    MATCH (parent:Agent)-[:MADE]->(p:Purchase) RETURN parent.name, sum(p.value)
    

    现在,如果您还想考虑代理子女的购买,您可以这样做:

    MATCH (parent:Agent)-[:MADE]->(p:Purchase) WITH parent, sum(p.value) AS own_value OPTIONAL MATCH (parent)<-[:WORKS_FOR*]-(child:Agent)-[:MADE]->(pc:Purchase) RETURN parent.name, own_value + sum(pc.value) as total_value
    

    【讨论】:

      【解决方案2】:

      我猜您经常需要计算特定代理 A 和产品 P 之间所有购买的总和。如果是这样,在 A 和 P 之间引入一个 total_purchases 关系可能是有益的。每当您添加新购买时,请务必更新现有的 total_purchases 关系。

      要考虑的另一件事是,当前拥有purchases 关系的方法是否隐藏了一些域概念。我可以想到代理商下多个订单。每个订单包含多个项目 - 这是您当前使用 purchases 关系引用的项目。所以订单将是一个节点,例如日期连接到 1) 代理和 2) 到产品。

      一般来说,作为一个概念或具有标识的所有事物都应该被建模为一个节点。

      【讨论】:

      • @Stefan:是的,在代理和产品之间引入订单节点会很有效。这消除了为同一订单的每个产品购买插入日期和时间的需要,而是可以将日期和时间作为节点订单的属性包含在内。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2023-03-31
      • 2014-07-11
      • 1970-01-01
      相关资源
      最近更新 更多