[英]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
屬性隱含了嗎?)。 有人可以解釋為什么需要它們嗎?
另外,在此示例中,我只需要一個從fqnSymbol
到fileCheck
鏈接,但這似乎要求使用LINKBAG
(如果使用LINK
它將失敗)。 那是我應該允許做的事情嗎?
此外,通過在邊緣添加索引有什么性能上的好處? 我用例是這樣的,我將永遠有一個fqnSymbol
在手時,我想查找一個fileCheck
。
我提出了https://github.com/orientechnologies/orientdb/issues/5494,以要求在此領域提供更好的文檔。
當創建一條邊(即E的一個實例)時,連接點存儲在兩個端點(頂點)上:
(vertex) -> [edge] -> (vertex)
據我了解,如果邊緣是E的直接實例,則這些端點是名為out_
和in_
屬性。 (類似地,如果它們是E的某個子類(例如EE)的直接實例,則它們將被命名為out_EE
和in_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.