2016-07-14 139 views
0

我想知道是否可以創建需要邊緣才能創建的頂點。是否有可能創建一個需要邊緣才能創建的頂點

例如,我想創建一個Invoice類,該類具有指向Person的HasCustomer邊。

我希望HasCustomer邊緣是必需的,才能創建發票。

除非您有HasCustomer邊緣,否則您無法創建Invoice

我知道我們可以有link to Person,但沒有參照完整性。我可以刪除Person and the Invoice,最後只需鏈接到一個不存在的客戶。

+1

這是一個很大的問題!我希望有人能幫你解答。 –

+0

@OutfastSource謝謝,希望我們得到的答案 –

+0

我認爲這個答案給出了一條線索: http://stackoverflow.com/questions/26274362/is-it-possible-to-constraint-edge-multiplicity-in-neo4j- orientdb/26278502#26278502我感興趣的元素是屬性的MIN約束。我在處理這個問題時遇到的問題是,頂點需要首先存在,然後是邊,否則必須同時創建邊和2個頂點。通過頂點上的最小值,邊緣需要被傳遞到我認爲不可能的創建頂點。 –

回答

0

看着官方文檔,你不能完成你所描述的操作。您可以使用的唯一屬性是類或邊上的字段。關於鏈接的使用,正如您所說的那樣,錯過了對參照完整性的控制,這是因爲執行此檢查在性能方面非常昂貴。

1

在OrientDB中,你必須自己創建邊。因此,如果您創建了發票頂點,則必須在發票和客戶之間創建HasCustomer邊緣。但是,如果您稍後刪除該發票頂點,則ODB將自動移除您創建的鏈接邊(以及其他),以便保持數據完整性(即不存在孤立邊)。

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

這也是爲什麼你應該選擇在文件API的圖形API。使用Document API,保持鏈接之間的完整性取決於您。

我也不確定它是否可行,但理論上可以創建一個服務器端函數,在創建任何發票頂點(onAfterCreation觸發器)後觸發,然後可以自動創建HasCustomer邊界。再次,我所有的理論,就像我以前從未做過的那樣。

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

斯科特

相關問題