gpt4 book ai didi

neo4j - 在 Neo4j 中,我可以强制执行关系+节点值约束吗?

转载 作者:行者123 更新时间:2023-12-02 08:29:24 25 4
gpt4 key购买 nike

这是来自 Neo4j 新手。我想问题是关于身份规则。

假设我有以下数据结构:

艺术家制作了很多专辑

我可以通过以下方式强制艺术家的唯一性:

CREATE CONSTRAINT ON (artist:Artist) ASSERT artist.name IS UNIQUE

这意味着名字是艺术家的商业身份。

但我还想确保每张专辑只存在一次 - 然而,专辑标识是(专辑名称 + 艺术家姓名),因为两个不同的艺术家可以有自己的同名专辑。使用 Neo4j 是否有一种优雅的方式来实现这一目标?

因此,对于艺术家 Metallica,我想确保只有一张名为 Death Magnetic 的专辑,并且在单个 Metallica 节点和单个 Death Magnetic 节点之间只存在一种关系,而另一位艺术家称为 Megadeth,可以有自己的专辑叫Death Magnetic(不同节点)。

这只保证了关系的唯一性,我仍然需要预先创建相册节点:

MATCH (artist:Artist { name:'Metallica' }),(album:Album { name:'Death Magnetic' })
MERGE (artist)-[r:MADE]->(album)
RETURN r

最佳答案

不,neo4j 不支持这种模式约束。您可以声明专辑名称的唯一性(您不想这样做,因为不止一个乐队可以制作同名专辑),或者您可以不受限制地生活。

更广泛地说,如果 neo4j 的图形模式具有关系基数功能会很好,但它们还没有,您必须询问开发人员是否/何时要内置它们。但它可能狡猾;例如,此处的基数约束是指外部节点的属性(专辑名称)。强制执行这一点可能会变得棘手;假设您有一张与 Metallica 关联的名为“Death Magnetic”的 Metallica 专辑。你有另一张与 Metallica 相关的专辑“Ride the Lightning”。有人进来把专辑名“Ride the Lightning”改成了“Death Magnetic”。好的,现在您有两个节点,它们都已链接到 Metallica,但违反了约束。你做什么工作?您是否拒绝允许编辑专辑名称?是否删除“Ride the Lightning”专辑节点?还是您允许编辑,但切断“Metallica”节点的链接?

由于诸如此类的问题,如果该功能存在,它的工作原理并不总是那么明显。图模式可能非常棘手。

关于neo4j - 在 Neo4j 中,我可以强制执行关系+节点值约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com