本部分内容中,我们将介绍:
- 如何标记用例中的实体
- 创建数据模型中所需要的图节点
一、建模节点
(一)定义标签
实体指的是我们要开发的应用程序用例中的主要名词,例如:
- 配方中使用了哪些成份?
- 谁嫁给了这个人?
用例的实体是指图形数据模型中标记的节点。在电影域实例中,我们使用用例中的名词来定义标签,例如:
- 电影里演什么人?
- 谁导演了一部电影?
- 一个人演过什么电影?
下面是一些标记的节点,我们将从这些节点开始。
(二)定义节点属性
节点属性用于:
- 唯一标识节点。
- 回答应用程序用例的具体细节。
- 返回数据。
例如,在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? |
|
2: What person directed a movie? |
|
3: What movies did a person act in? |
|
5: Who was the youngest person to act in a movie? |
|
7: What is the highest rated movie in a particular year according to imDB? |
|
8: What drama movies did an actor act in? |
|
给出了这些用例步骤的详细信息,下面是我们将为电影节点定义的属性:
- 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属性是可选的。
以下是初始数据模型:
下面是您将要创建的初始实例模型:
二、创建节点
以下是您将使用的初始实例模型:
运行下面的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?
以下是我们当前的图形数据模型:
我们还有一个必须建模的额外用例。我们需要能够将评级网站用户与其他类型的演员和导演区分开来。
注意:在学习本文时,您可以使用任何想要绘制图形数据模型的技术。大多数人只用纸和笔。
四、创建更多节点
我们想在图中添加几个用户节点,以便测试对模型的更改。请根据需要自行添加吧......
引用
https://graphacademy.neo4j.com/courses/modeling-fundamentals/1-getting-started/2-the-domain/