【问题标题】:Neo4J - SQL to CQL - Relations and JoinsNeo4J - SQL 到 CQL - 关系和连接
【发布时间】:2015-11-08 11:55:21
【问题描述】:

我有两张表,如下所述。

表 1:国家/地区

c_id, int
c_name, varchar(20) (PK)

此表中的示例记录是。

c_id | c_name
1 | USA
2 | UK
3 | PK

表 2:移民

i_id, int
i_name, varchar(20)
i_country, int (FK)

此表中的示例记录是。

i_id | i_name | i_country
1 | John | 1
2 | Graham | 2
3 | Ali | 3

问题 1:

我想在 Neo4J 中创建两个节点(表)以及数据类型。 我可以使用以下语法创建节点,但我不知道如何定义数据类型。

CREATE (country:Country {c_id:1,c_name:"PK"}) RETURN country

问题 2:

我无法理解如何在 PK 和 FK 上的两个节点之间创建关系,请提供在上述两个节点之间创建关系的语法。

问题 3:

产生以下输出的 CQL 是什么。

i_id | i_name | i_country | c_id | c_name
1 | John | 1 | 1 | USA
2 | Graham | 2 | UK
3 | Ali 3 | PK 

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    问题 1

    您没有在 neo4j 中定义数据类型。在不同的节点上,您可以为同一个键存储不同的数据类型。

    问题 2

    您可以像这样创建关系:

    MATCH (i:Immigrant {i_id: 2}), (c:Country {c_id: 1})
    CREATE (i)-[:MIGRATED]->(c)
    

    问题 3

    这是“Cypher”而不是“CQL”。我想你想MATCHImmigrant 节点到Country 节点:

    MATCH (i:Immigrant)-[:MIGRATED]->(c:Country)
    RETURN i.i_id, i.name, c.c_id, c.name
    

    【讨论】:

    • 谢谢!问题1:好的。问题 2:它确实创建了关系,但只创建了一条记录。我需要为所有记录创建它。此外,我了解,联接应该在字段上,然后为什么使用以下值: MATCH (i:Immigrant {i_id: 2}), (c:Country {c_id: 1})
    • 没有连接和字段。有通过关系连接的节点。节点和关系都有属性。属性是键值对。该查询匹配两个节点(Country 和 Immigrant)以在它们之间创建关系。如果您想对所有记录执行此操作,则必须以编程方式或例如执行此操作。通过加载 CSV 文件:neo4j.com/docs/stable/query-load-csv.html
    • 如果你真的想拥抱图范式,为什么不去掉表格中的那些“主键”呢?你真的可以不用它们,因为你不会在其他地方讲述它们(在 RDBM 中,它们是通过“外来”键使用将表行链接到其他表所必需的)。图表中不需要。如果您想通过任何其他方式强制唯一性,您实际上可以替换为真正的密钥(ISO 国家代码等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多