发布于 2017-12-21 12:19:09
您可以仅使用节点对此进行建模。类似于:
CREATE (:Translation{code:'SLD', description:'some lengthy description'})
CREATE (:Translation{code:'NY', description:'New York'})
CREATE (:Translation{code:'USA', description:'United States'})
CREATE (:Address{address:'123 Street St', state:'NY', country:'USA'})对于用法,可能是这样的:
MATCH (p:Person)-[:LIVES_AT]->(a:Address)
WHERE id(p) = 101
OPTIONAL MATCH (state:Translation{code:a.state})
OPTIONAL MATCH (country:Translation{code:a.country})
RETURN a.address as address, state.description as state, country.description as country也就是说,我认为图形数据库使得对这些的需求变得有些过时。在我看来,使用它们的原因是为了节省空间,因为相同的值被重复使用,因此在RDBMS中,只将较长的描述保存在一个位置是有意义的。
使用图表,似乎建议您将值提取到它自己的节点,并创建与它的关系,如下所示:
CREATE (ny:State{code:'NY', name:'New York'})
CREATE (usa:Country{code:'USA', name:'United States})
CREATE (a:Address{address:'123 Street St'})
CREATE (a)-[:IN_STATE]->(ny) // or a more generic :IN if desired
CREATE (a)-[:IN_COUNTRY]->(usa) // or a more generic :IN if desired然后,查询将变为:
MATCH (p:Person)-[:LIVES_AT]->(a:Address)
OPTIONAL MATCH (a)-[:IN_STATE]->(state)
OPTIONAL MATCH (a)-[:IN_COUNTRY]->(country)
RETURN a.address as address, state.name as state, country.name as country您将注意到这看起来非常相似。长的国家名称仍然只存储在一个地方。真正的区别在于上下文,既用于处理具有特定标签和可能更具体的属性键的节点,也用于将与这些节点的关系作为数据模型的一部分,而不是必须以某种方式知道或猜测某些属性字段可以在不同的节点中查找(例如,在浏览器中尝试CALL db.schema() )。
如果您在:State(代码)和:Country(代码)上添加索引,这也会使通过代码查找地址变得更容易。
https://stackoverflow.com/questions/47917557
复制相似问题