【发布时间】:2018-10-30 12:50:23
【问题描述】:
我想在 Neo4j 中制作 IMDB 的角色/角色结构。我需要标签Person、Movie 和Character。 Character,因为一个角色可以出现在多部电影中,由不同的人扮演。
没有Character,很简单:
(Person)-[:PLAYS_IN]->(Movie)
但是PLAYS_IN 是Character,所以应该是这样的:
(Person)-[:PLAYS_AS]->(Character)-[:PLAYS_IN]->(Movie)
但这不起作用,因为它没有直接的Person-Movie 关系。没有这个,所有扮演过彼得·帕克的人,都会出现在每一部有彼得·帕克的电影中。
必须存在人-电影关系,但也必须存在人-电影-角色关系。如何?这可以工作,但这很讨厌:
(Person)-[:PLAYS_IN {uuid}]->(Movie), (Character {uuid})
因为现在我正在创建自己的外键类型的关系。那是非常ungraphdb。但它有效:
MATCH (p:Person)-[r:PLAYS_IN]->(m:Movie), (c:Character)
WHERE c.uuid = r.uuid
RETURN p, c, m
通过构建笛卡尔积 =( 这是非常 RDBMS,但不是非常 graphdb。我无法查询 Character-Movie 或 Character-Person,因为这不是真正的关系。
如何在 Neo4j 中创建一个带有 3 个外键 (movie_id, character_id, person_id) 的 RDBMS 链接表??
编辑 1
RDBMS 等价物:
movies (id, title) # e.g. Dragon Tattoo, or Spider's Web
people (id, name) # e.g. Rooney Mara, or Claire Foy
characters (id, name) # e.g. Lisbeth Salander
roles (movie_id, person_id, character_id) # 2 rows with 1 distinct character_id
【问题讨论】:
标签: neo4j graph-databases