例如,如果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
或
Match (p:SmartPhone)-[:brand]->(b:Brand {name:"iPhone"}) return p;
这是一个好设计吗?感谢。
答案 0 :(得分:1)
您应该使用#34; Smartphone"这样的公共属性来命名它们,以便您可以查询名称为iphone的智能手机。它实际上取决于架构和您拥有的数据类型。
例如:
如果您拥有不同品牌和不同级别的各种智能手机,那么搜索标有smartphone
而非特定品牌的节点会很容易。
希望这有帮助!
答案 1 :(得分:0)
除非绝对必要,否则应避免冗余。冗余需要更多的数据存储,并且可能使维护数据模型变得更加困难,因为您必须确保冗余存储的数据始终保持一致。
此外,如果您在:Brand(name)
上添加index,那么您的上一个Cypher示例将会很快。