我将使用neo4j 2.1.6构建一个用于电信的Web应用程序。
我已经开始在UML图中构建我的模型,描述每个元素之间的关系(例如NetworkBoards的内阁组合,NetworkBoards组成的Vcards等)。
我最初的想法是从我的UML中描述的类创建 - 节点。如UML中所述,这些节点将彼此相关。稍后我会创建这些节点的实例,这些节点将包含我的数据,并且它们的父类是相互关联的(请检查UML附件)。
现在我意识到这种思维方式可能不是" neo4j"办法。我想到了我应该实际构建包含我的数据的节点,并根据我在UML中描述的关系将这些节点相互关联。根据我在UML中所希望的类,节点实际上会分组到标签中。
这两种方法的区别在于,在第二种方法中,我不会创建在我的UML节点中描述的类,而只会创建具有这些类名称的标签。我希望我想说的是清楚的。 你怎么看?哪种方法实际上更正确并且在neo4j的哲学中?
我真的很期待听到您的意见和建议。
答案 0 :(得分:1)
我不知道是否有哲学本身;图形数据库为您提供节点和关系作为原语,以便与其他数据库不同,这些数据库可能会为您提供其他原语,如文档,表格等。您应该查看一些general guidance on modeling with graphs。
您可以从Learning Neo4J这样的书籍中窃取一些原则。你仍然需要解释你的背景。该书的前两个是“查询能力设计”和“与用例对齐关系”。
因此,我对您的第一个强烈建议是不要将您的数据模型构建为与用例或查询分开的抽象模型。构建您需要询问此数据库的问题列表。如何轻松回答这些问题将指导您的设计过程。
在您的UML设置中,您似乎指的是很多HAS_A关系,例如Cabinet
有一系列NetworkBoards
等。
作为起点,将每个UML类视为Neo4j中的节点标签。然后,阶级关系成为neo4j关系。这只是一般建议,您需要根据查询要求进行调整。这大致类似于您列出的“第一个想法”。这根本没有错,我不认为。
你的第二种方法与第一种方法非常相似。当您使用其中的数据构建节点时,我将单个节点视为UML类的实例,即特定的NetworkBoard
。类成员资格本身通常可以是Neo4J中的标签。你怎么知道某事是NetworkBoard
?它有这个标签。
所以...你离我不远,但我认为这里缺少的是你的查询要求,以及你需要问这个数据库的哪些问题。