【发布时间】:2014-12-01 07:04:50
【问题描述】:
早上好,
我开始从关系型数据库转移到 Neo,从而将我的“表格思维”转移到图形世界中。考虑一个模型来表示我的任务模块,我需要将以下实体关联起来:
- 客户
- 任务
- 用户
所以我想出了这个主意:
(CUSTOMER)-[:GENERATES]->(TASK)
(USER)-[:IS_ASSIGNED_TO]->(TASK)
我正在思考当我要查询这个时,我会用标签 TASK 标记每个任务节点,并将状态作为属性,例如关闭,打开等。
现在查找所有打开的任务都可以解决
MATCH (t:TASK {status:"open"}) -[:IS_ASSIGNED_TO]-> (u:USER)
MATCH (c:Customer) -[:GENERATES]-> (t:TASK)
RETURN t.number as task_number, c.name as customer_name, u.name as user_name
在创建节点和关系时,我想知道我是否只是为任务创建一个节点,一个为用户创建一个节点,一个为客户创建一个节点,并像上面的模型一样连接它们,或者我是否需要像“父节点”这样的东西每个节点类型,例如一个 GENERAL_USER、一个 GENERAL_TASK 和一个 GENERAL_CUSTOMER 并且已经将每个单个节点连接到该父节点以及覆盖当前状态的关系。背后的想法是,当我想要打开任务时,我可能更容易从 GENERAL_TASK 节点开始并查找与状态为 OPEN 的任务的所有关系,而不是寻找可能在数据库中某处的每个节点。这是否比要求数据库返回所有具有内容为 OPEN 的属性状态的 TASK 节点更快(即使已编入索引)?
很高兴有一些意见来更好地了解如何对数据库和关系进行建模。感谢您的宝贵时间。
【问题讨论】: