这是我的情景。我有一个预定义的数据类型结构用于书籍。为简单起见,请以此为例。结构如下图所示。它是标签属性图,信息是自我解释的。 此数据类型结构已修复,我无法更改。我只是用它。
当有一本书时,让我们称之为 Harry Potter ,在系统中,它可能如下所示:
因此,该书有自己的属性(ID,Name,...),并且还包含字段类型MandatoryData
。通过查看此图表,我们可以了解有关该书的所有信息。
当我在系统中有2本书时出现问题,如下所示:
在这种情况下,还有另一本名为 Graph DB 的书,其中突出显示了这些信息。
这种设计的问题是:我们不知道哪些信息属于哪本书。例如,我们无法区分publishedYear
。
我的问题是:如何解决或避免这个问题?我应该为每本书创建1 MandatoryData
吗?你能告诉我任何设计吗?
我使用的是Neo4j和Cypher。谢谢你的帮助!
答案 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
您提出的问题中提出的模型不可行,因为无法识别您所指明的特定财产的所有者。