Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 使用相同的名称创建标签和节点有意义吗?_Neo4j - Fatal编程技术网

Neo4j 使用相同的名称创建标签和节点有意义吗?

Neo4j 使用相同的名称创建标签和节点有意义吗?,neo4j,Neo4j,例如,如果iPhone是一个品牌,而iPhone 8 Plus是一个产品,那么创建两个标签“iPhone”和“SmartPhone”是否有意义,但同时创建iPhone作为节点,因为iPhone作为一个品牌有自己的一些属性: create (p:iPhone:SmartPhone {name:"iPhone 8 Plus"}), (b:Brand {name:"iPhone", developer:"Apple", release:"2007"}), (p)-[:bra

例如,如果iPhone是一个品牌,而iPhone 8 Plus是一个产品,那么创建两个标签“iPhone”和“SmartPhone”是否有意义,但同时创建iPhone作为节点,因为iPhone作为一个品牌有自己的一些属性:

create (p:iPhone:SmartPhone {name:"iPhone 8 Plus"}),
       (b:Brand {name:"iPhone", developer:"Apple", release:"2007"}),
       (p)-[:brand]->(b)
这听起来是多余的吗?因为iPhone既是一个标签又是一个节点名。要查找所有iPhone,我可以:

Match (n:iPhone) return n


这个设计好吗?谢谢。

您应该使用诸如Smartphone之类的公共属性来命名它们,这样您就可以查询名为iphone的智能手机。它实际上取决于模式和您拥有的数据类型

例如: 如果您拥有各种不同品牌和不同级别的智能手机,那么搜索标有智能手机而不是特定品牌的节点就很容易了


希望这有帮助

除非绝对必要,否则应避免冗余。冗余需要更多的数据存储,并且会使维护数据模型更加困难,因为您必须确保冗余存储的数据始终保持一致


此外,如果您添加on:Brandname,您的最后一个Cypher示例将非常快。

您的意思是将智能手机用作属性而不是标签?通过分配两个标签,iPhone和SmartPhone,我可以快速查询所有iPhone或所有智能手机。对吧?对。但不是作为财产,而是作为所有手机标签的智能手机。因为使用标签查询比查询属性更快。如果我从p:iPhone:SmartPhone{name:iPhone 8 Plus}中删除标签iPhone,我获得查询所有iPhone的唯一方法是通过第二个查询,这应该比第一个查询慢得多,即使创建了索引:Brandname?对于标签,我是否需要创建索引,就像iPhonename获得加速效果一样,或者如果我只是想返回所有iPhone,我执行Match n:iPhone return n,我是否为iPhone和SmartPhone这两个标签创建索引无关紧要?您的第二个查询稍微慢了一点,但速度应该不会太慢。如果你仍然使用标签方法,那么不需要索引就可以获得所有iPhone。
 Match (p:SmartPhone)-[:brand]->(b:Brand {name:"iPhone"}) return p;