首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Neo4j中实现EAV模型?

如何在Neo4j中实现EAV模型?
EN

Stack Overflow用户
提问于 2015-02-15 07:49:41
回答 2查看 859关注 0票数 2

实体-属性-值(EAV)模型非常强大,但是complex to implement using SQL,因此人们often look for alternatives to EAV。这似乎是图形数据库的完美候选。我了解如何构建一个电影数据库,在该数据库中,节点上有带有Neo4j标签" movie“的节点,其属性为"release_date”。您将如何使这更通用,使电影有Neo4j标签“实体”遵循一般的EAV模型?

EN

回答 2

Stack Overflow用户

发布于 2015-02-15 07:49:41

我想了很多,但是,我不相信我有一个很好的解决方案,。反正我也要试一试。以下是最基本的模型:

代码语言:javascript
复制
<node>                         <relationship>    <node>
Attribute                  --> :VALUE        --> Entity
name="Label",type="string" --> value="Movie" --> name="The Matrix"

使用此模型,您可以编写如何显示和编辑Attribute.type的代码。例如,可能所有标签都有一个在前端有有限选项的文本字段,而所有日期都有一个日期选择器。您可以将Attribute.type分解为它自己的节点Type,如果这更好的话(特别是对于处理复合类型来说是有意义的)。在这种情况下,属性和类型节点之间的关系类型。

如果实体有多个关系(就像评审的情况一样),或者您想将值与其他东西(例如分配值的用户)关联起来,这就变成了一个问题。现在,我认为,关系"VALUE“必须是它自己的"Value”类型的节点(即具有Neo4j标签"Value"),它具有来自属性节点和用户节点的传入关系。

完整的表单有Type节点、属性节点、用户节点、值节点和实体节点,在这些节点上,关系基本上没有属性。

票数 1
EN

Stack Overflow用户

发布于 2015-02-16 03:59:55

你为什么一开始就需要它?

我一直认为EAV只是关系数据库的一种解决方法,而不是模式免费。

Neo4j和其他nosql数据库一样是模式无关的,因此您只需将所需的属性添加到节点和关系中。

如果需要,还可以在图中的元模式中记录EAV模型,但在大多数情况下,如果元模式驻留在创建和使用属性的应用程序中,就足够了。

通常,我将标签视为角色,在特定的上下文中提供某些属性和关系。一个节点可以有多个标签,每个标签都代表这些角色之一。

代码语言:javascript
复制
E.g. for the same node
:Person(name)-[:LIVES_IN]->(:City)
:Employee(empNo)-[:WORKS_AT]->(:Company)
:Developer()-[:HAS_SKILL]->(:CompSkill)
...

因此,在您的示例中,:Entity只是一个包含name属性的标签。

:Movie是一个包含release_date属性和ACTED_IN关系的标签。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28524038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档