是否可以创建需要边缘才能创建的顶点

时间:2016-07-14 13:47:29

标签: constraints orientdb

我想知道是否可以创建一个需要边缘才能创建的顶点。

例如,我想创建一个Invoice类,其HasCustomer边指向Person。

我希望HasCustomer边缘是强制性的,以便创建发票。

除非您拥有Invoice优势,否则无法创建HasCustomer

我知道我们可以拥有link to Person,但没有参照完整性。我可以删除Person and the Invoice,最终会找到一个不存在的客户链接。

2 个答案:

答案 0 :(得分:1)

在OrientDB中,您必须自己创建边缘。因此,如果您已创建发票顶点,则必须在发票和客户之间创建HasCustomer边缘。

但是,如果稍后删除该发票顶点,ODB也会自动删除您创建的链接边(以及其他),以保持数据完整性(即没有孤立的边)。

http://orientdb.com/docs/2.1/SQL-Delete-Vertex.html

这也是您应该通过Document API选择Graph API的原因。使用Document API,保持链接之间的完整性取决于您。

我也不确定是否可行,但理论上你可以创建一个服务器端函数,它在创建任何发票顶点后触发(onAfterCreation触发器),然后可以自动创建HasCustomer边。同样,我所有的理论都是如此,因为我之前从未这样做过。

http://orientdb.com/docs/2.2.x/Functions.html http://orientdb.com/docs/2.2.x/Dynamic-Hooks.html

斯科特

答案 1 :(得分:0)

观看官方文档,您无法执行您所描述的操作。您可以使用的唯一属性是在类或边上的字段上。关于使用链接,正如你所说的那样,缺少对参照完整性的控制,这是因为在性能方面做这个检查是非常昂贵的。