簡體   English   中英

為什么頂點需要具有邊的屬性?

[英]why do vertices need to have properties for edges?

我發現https://groups.google.com/forum/#!topic/orient-database/Y0QJiXk7d1I上的討論對於幫助我建立帶有邊緣的嚴格架構非常有用。 這是我的代碼

val fileLink = schema.createClass(DefinedInS.label, g.getEdgeBaseType())
fileLink.setStrictMode(true)
fileLink.createProperty("out", OType.LINK, fqnSymbol).setNotNull(true)
fileLink.createProperty("in", OType.LINK, fileCheck).setNotNull(true)
fqnSymbol.createProperty("out_" + DefinedInS.label, OType.LINKBAG).setNotNull(true)
fileCheck.createProperty("in_" + DefinedInS.label, OType.LINKBAG).setNotNull(true)

但是我很困惑,為什么我根本不需要最后兩行,它們不是多余的(或者至少由fileLink屬性隱含了嗎?)。 有人可以解釋為什么需要它們嗎?

另外,在此示例中,我只需要一個fqnSymbolfileCheck鏈接,但這似乎要求使用LINKBAG (如果使用LINK它將失敗)。 那是我應該允許做的事情嗎?

此外,通過在邊緣添加索引有什么性能上的好處? 我用例是這樣的,我將永遠有一個fqnSymbol在手時,我想查找一個fileCheck

我提出了https://github.com/orientechnologies/orientdb/issues/5494,以要求在此領域提供更好的文檔。

當創建一條邊(即E的一個實例)時,連接點存儲在兩個端點(頂點)上:

(vertex) -> [edge] -> (vertex)

據我了解,如果邊緣是E的直接實例,則這些端點是名為out_in_屬性。 (類似地,如果它們是E的某個子類(例如EE)的直接實例,則它們將被命名為out_EEin_EE 。)這些細節通常無關緊要(例如,outE()收集所有傳出的邊),但是有時它們(如在定義屬性約束時)。

關於多重性約束:

我想要一個從fqnSymbol到fileCheck的鏈接...

可以使用MIN和MAX強制執行此約束(至少在一定程度上):

alter property fqnSymbol.out_ MIN 1;
alter property fqnSymbol.out_ MAX 1;

(幸運的是,MIN和MAX約束不會阻止首先創建fqnSymbol頂點:-)

嚴格執行可能需要編寫鈎子或觸發器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM