我从Neo4J开始,试图将我当前的系统从关系数据库迁移到Neo4J并且有一个特殊的问题需要克服。
我有一个名为Orders的表,它有两个特别的列,这让我很头疼。ShipBy是(火车/航空/卡车)的值Carrier是运送订单的公司的Id,但这一点发生了变化,如果它通过航空运输,它有类似UPS/阿拉斯加/大陆的东西;如果它是通过火车运输的,它有类似BNSF/堪萨斯州铁路公司等的东西。。。
这些值来自不同的目录表,所以在我的系统中用这样的方法解决了这个问题从订单中选择订单。编号,承运人。名称,(从卡车司机工会中选择"T"类型,Id,名称全部从铁路公司工会中选择"R"类型,Id、名称全部从航空公司中选择"A"类型,Id,名称)承运人其中Orders.ShipBy=承运商。类型和订单。CarrierId=Carrier.Id
如果能给我指点,我将不胜感激。
Neo4J不像关系数据库那样拥有视图。作为候补,你可以做几件事:
- 根据需要,不断重新发布用于计算所需"视图"的查询
- 创建一个特殊的"视图节点",然后通过关系将该节点链接到"视图"中自然出现的所有其他节点。查询视图变得非常简单,只需拉起一个"视图节点"并遍历边即可获得视图结果
选项#1最简单,选项#2可能更快,但随之而来的维护负担是,随着数据库中底层节点的更改,您需要维护视图并确保它指向正确的位置。
正如我们在这里所读到的"在数据库理论中,视图是存储的数据查询的结果集,数据库用户可以像在持久数据库集合对象中一样查询。"
Neo4j不托管存储查询,但您可以考虑扩展Stefan在这里发布的Neo4j服务器:https://stackoverflow.com/a/21780942/3442366
物化的观点当然是不同的。。。
依靠Neo4j提供的关系管理能力;-)
干杯,洛伦佐