如何为一个人提供的服务进行数据模型背书,图数据建模

How to data model endorsement for a service provided by a person, Graph Data modeling

你好,我是图形数据库建模的新手,对表达对个人提供的服务的认可有一些疑问。用例如下。 PersonA 为 PersonB 提供的服务背书。

关键是,如果我是背书的接受者,我想知道谁背书了我。我已经想出了几种可能的方案,但由于我缺乏经验,我怀疑什么是最好的方法。

场景一

背书直接表达为一种关系,服务属于背书下的 属性 所以它看起来像:

PersonA-------ENDORSE{service}--->PersonB 

场景二

我为一个名为 Service 的实体建模。问题是,当我将关系 "ENDORSE" 用于服务时,我会丢失有关我支持谁的信息。所以我必须在我支持谁的关系中保持 属性。然后 PersonB 将获得对服务的认可,但他不知道实际上是谁给出了认可。所以......它看起来像这样:

PERSONA----ENDORSE{personB}--->Service------ENDORSMENT{personA}--->PERSONB

这有意义吗?

场景三:

我规范化第二个关系 "ENDORSMENT" 并将 personA 排除为 属性 ,但我需要查询所有 Person 以找出他们认可了谁。

你会如何模拟这种关系?

第二种方法看起来不错,您不必在关系上添加这些属性。

有可能获得为服务 S 背书人 B 的人 A。 唯一的问题是任何服务 S 都会有多个节点。如果这是不可接受的。

您可以将第二种方式中的Service节点替换为Endorse节点E,并将此E连接到服务节点S。 所以会有四种类型的节点。

编辑:

添加图片进行说明。 根据需要重命名 REL1 和 REL2。 @Stdob 为这些关系建议了一些好听的名字。

验证图形数据库数据模型的两个重要原则:

  • 如果一个实体或事实可以多次使用,那么它应该被存储 作为节点
  • 如果两个节点的关系需要存储节点 identifiers,那么这个关系必须转化为一个节点

所以 @Raj 指出了正确的方向,在这种情况下模型可能如下所示:

我推荐你阅读这篇文章: