如何在这种情况下设计图形数据库?

时间:2017-11-22 14:51:50

标签: neo4j nosql cypher graph-databases property-graph

这是我的情景。我有一个预定义的数据类型结构用于书籍。为简单起见,请以此为例。结构如下图所示。它是标签属性图,信息是自我解释的。 此数据类型结构已修复,我无法更改。我只是用它。

DTR Example

当有一本书时,让我们称之为 Harry Potter ,在系统中,它可能如下所示:

DTR 1 book

因此,该书有自己的属性(ID,Name,...),并且还包含字段类型MandatoryData。通过查看此图表,我们可以了解有关该书的所有信息。

当我在系统中有2本书时出现问题,如下所示:

DTR 2 Books

在这种情况下,还有另一本名为 Graph DB 的书,其中突出显示了这些信息。

这种设计的问题是:我们不知道哪些信息属于哪本书。例如,我们无法区分publishedYear

我的问题是:如何解决或避免这个问题?我应该为每本书创建1 MandatoryData吗?你能告诉我任何设计吗?

我使用的是Neo4j和Cypher。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

<强>更新

来自评论(@AnhTriet):

  

感谢您的建议。但我希望有某种联系   这些书之间。如果我们创建新的MandatoryData,那些书将会   完全分开。 (...)我的意思是,2本书应该指向一些   相同的节点,如果他们有相同的作者或发布的年份,对吗?

在评论中做了一些澄清之后,我建议为数据库中的每个属性创建一个MandatoryData节点。然后,您将把给定的书连接到各种MandatoryData节点,具体取决于书籍的属性数量。

这样,具有相同作者的两本书将连接到同一MandatoryData节点。

由于您无法更改数据模型,我强烈建议您为添加到系统的每本新书创建一个新的MandatoryData节点。

通过这种方式,您可以通过以下查询获取有关特定图书的信息:

// Get the author's name of the book with ID = 1
MATCH (:Book {ID : 1})-->(:MandatoryData)-->(:Author)-->(:Name)-->(v:Value)
RETURN v.value

您提出的问题中提出的模型不可行,因为无法识别您所指明的特定财产的所有者。