Neo4j图数据建模基础|建模节点
  iwbGD3gmtxyT 2023年11月02日 52 0

本部分内容中,我们将介绍:

  • 如何标记用例中的实体
  • 创建数据模型中所需要的图节点

一、建模节点

(一)定义标签

实体指的是我们要开发的应用程序用例中的主要名词,例如:

  1. 配方中使用了哪些成份
  2. 谁嫁给了这个

用例的实体是指图形数据模型中标记的节点。在电影域实例中,我们使用用例中的名词来定义标签,例如:

  1. 电影里演什么
  2. 导演了一部电影
  3. 一个演过什么电影

下面是一些标记的节点,我们将从这些节点开始。

Neo4j图数据建模基础|建模节点_数据模型

(二)定义节点属性

节点属性用于:

  • 唯一标识节点。
  • 回答应用程序用例的具体细节。
  • 返回数据。

例如,在Cypher查询中,属性用于:

  • 定位(查询的起始位置)。

MATCH (p:Person {name: 'Tom Hanks'})-[:ACTED_IN]-(m:Movie) RETURN m

  • 遍历图形(导航)。

MATCH (p:Person)-[:ACTED_IN]-(m:Movie {title: 'Apollo 13'})-[:RATED]-(u:User) RETURN p,u

  • 从查询返回数据。

MATCH (p:Person {name: 'Tom Hanks'})-[:ACTED_IN]-(m:Movie) RETURN m.title, m.released

(三)电影图中的唯一标识符

在电影图中,我们使用以下属性唯一标识节点:

  • Person.tmdbId
  • Movie.tmdbId

[提示]tmd:the movie database,网络上常见的一种缩写方式。

(四)节点的属性

除了用于唯一标识节点的tmdbId之外,我们还必须重新查看用例,以确定节点必须保存的数据类型。

下面是我们将重点关注的特定于人物和电影节点的用例列表。这些用例告诉我们电影和人物节点中需要的数据。

Use case

Steps required


1: What people acted in a movie?




  1. Retrieve a movie by its title.

  2. Return the names of the actors.




2: What person directed a movie?




  1. Retrieve a movie by its title.

  2. Return the name of the director.




3: What movies did a person act in?




  1. Retrieve a person by their name.

  2. Return the titles of the movies.




5: Who was the youngest person to act in a movie?




  1. Retrieve a movie by its title.

  2. Evaluate the ages of the actors.

  3. Return the name of the actor.




7: What is the highest rated movie in a particular year according to imDB?




  1. Retrieve all movies released in a particular year.

  2. Evaluate the imDB ratings.

  3. Return the movie title.




8: What drama movies did an actor act in?




  1. Retrieve the actor by name.

  2. Evaluate the genres for the movies the actor acted in.

  3. Return the movie titles.



给出了这些用例步骤的详细信息,下面是我们将为电影节点定义的属性:

  • Movie.title (string)
  • Movie.released (date)
  • Movie.imdbRating (decimal between 0-10)
  • Movie.genres (list of strings)

下面是为节点Person定义的属性:

  • Person.name (string)
  • Person.born (date)
  • Person.died (date)

提示:这里died属性是可选的。

以下是初始数据模型:

Neo4j图数据建模基础|建模节点_sed_02

下面是您将要创建的初始实例模型:

Neo4j图数据建模基础|建模节点_sed_03



二、创建节点

以下是您将使用的初始实例模型:

Neo4j图数据建模基础|建模节点_用例_04

运行下面的Cypher代码,将Person和Movie节点添加到将用作初始实例模型的图中:

MATCH (n) DETACH DELETE n;

MERGE (:Movie {title: 'Apollo 13', tmdbId: 568, released: '1995-06-30', imdbRating: 7.6, genres: ['Drama', 'Adventure', 'IMAX']})
MERGE (:Person {name: 'Tom Hanks', tmdbId: 31, born: '1956-07-09'})
MERGE (:Person {name: 'Meg Ryan', tmdbId: 5344, born: '1961-11-19'})
MERGE (:Person {name: 'Danny DeVito', tmdbId: 518, born: '1944-11-17'})
MERGE (:Person {name: 'Jack Nicholson', tmdbId: 514, born: '1937-04-22'})
MERGE (:Movie {title: 'Sleepless in Seattle', tmdbId: 858, released: '1993-06-25', imdbRating: 6.8, genres: ['Comedy', 'Drama', 'Romance']})
MERGE (:Movie {title: 'Hoffa', tmdbId: 10410, released: '1992-12-25', imdbRating: 6.6, genres: ['Crime', 'Drama']})

您可以通过运行以下代码来验证节点是否已创建:

MATCH (n) RETURN n

图中应该有7个节点。


三、标识新标签

现在,我们需要为新的用例重构模型:

Use case #4: How many users rated a movie?

我们已经为我们的用例确定了Person和Movie节点:

  • Whatpeopleacted in amovie?
  • Whatpersondirected amovie?
  • Whatmoviesdid apersonact in?

以下是我们当前的图形数据模型:

Neo4j图数据建模基础|建模节点_用例_05

我们还有一个必须建模的额外用例。我们需要能够将评级网站用户与其他类型的演员和导演区分开来。

注意:在学习本文时,您可以使用任何想要绘制图形数据模型的技术。大多数人只用纸和笔。


四、创建更多节点

我们想在图中添加几个用户节点,以便测试对模型的更改。请根据需要自行添加吧......

引用

​https://graphacademy.neo4j.com/courses/modeling-fundamentals/1-getting-started/2-the-domain/​

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
iwbGD3gmtxyT