【发布时间】:2013-01-10 20:27:15
【问题描述】:
我是图形数据库的新手,对它承诺的范围和功能感到不知所措。在设计应用程序时,将我们的情感设计模式与实际性能设计保持一致是非常重要的。困扰我的问题之一是是否将某些信息作为关系属性或节点属性。 这是用例。我们有通过传入关系“service_provider”相关的实体。起始节点成为结束节点的提供者。现在每个服务提供商都通过一些合同与他们的客户(或消费者)相关联。像服务频率、每次服务成本、不显示费用等。这些合同的细节可能因服务而异,但属性将始终存在。
所以现在我的问题是,这些合约是否应该是一个不同的节点,可以连接到一对实体(服务提供者和消费者),或者它们应该是关系本身的一部分。
请注意,我的情感感觉是让它成为关系的一部分,这就是为什么我的描述可能会描绘出这样的画面。但是,情况不一定如此。我想听听你的意见,以便我总结我的方法。
如果您认为问题出现在错误的位置,请考虑建议更好的位置。
我已经提到过文档 Boosting recommendation results @ docs.neo4j.org - 所有文档都表明,我提到的是一个可能的解决方案。但这里有一些担忧 - 这些例子是关系属性的精简版 - 他们并没有真正衡量这两种方法的优点和缺点
Multiple relationships of the same ... @ Stackoverflow - 不是同一个问题,但是,它与用例有关。
引用来自@bendaizer 的响应 现在这是一个性能问题。比较#1 和#4(部分)。假设合同是由服务提供者定义的(至少在大多数情况下),服务提供者可以连接到消费者的唯一方式是通过合同。所以我们有一个被合同包围的服务提供者,并且合同连接到消费者。当我尝试通过服务提供商查找消费者时......我必须做额外的合同跳跃。而根据#1,可以将相同的合同信息放入关系属性中。假设所有合同都是唯一的,预计哪一个表现更好?虽然这样做,但我不想失去回答诸如[“服务提供商 X”的所有客户支付每小时 50 美元的费率 - 50 美元/小时是合同信息的一部分] 之类的问题的能力]
【问题讨论】:
-
一份合同可以有多个客户吗?
-
合同是从模板继承而来的,但是,在签署时,它只有一个提供者实体和一个客户实体。一个模板可以被多个客户使用,但不能签署合同。
-
老实说,由于您是图形数据库的新手,我建议您不要尝试寻找“上帝之手”的解决方案。四处打听,形成意见,凭直觉行事。查看该实施的优点/缺点。并及时重构或在您的下一个实施中使用该专有技术。不幸的是,这个领域从实践中提供的好处多于理论,所以不要害怕犯错误。但要准备好处理它们。
-
@Khez 你说得对,“顺其自然”。而且我希望遵循我认为正确的方法...保持合同为关系。
标签: database-design nosql neo4j