Orientdb 为什么顶点需要具有边的属性?

Orientdb 为什么顶点需要具有边的属性?,orientdb,Orientdb,我发现在上的讨论非常有用,可以帮助我建立一个带有边缘的严格模式。这是我的密码 val fileLink = schema.createClass(DefinedInS.label, g.getEdgeBaseType()) fileLink.setStrictMode(true) fileLink.createProperty("out", OType.LINK, fqnSymbol).setNotNull(true) fileLink.createProperty("in", OType.LI

我发现在上的讨论非常有用,可以帮助我建立一个带有边缘的严格模式。这是我的密码

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
properties所暗示的?)。有人能解释一下为什么需要它们吗

此外,对于本例,我希望从
fqnSymbol
fileCheck
链接正好有一个链接,但这似乎需要使用
LINKBAG
(如果我使用
link
,则会失败)。这是我应该被允许做的事吗

此外,在边缘添加索引是否有任何性能优势?我的用例是这样的:当我想查找
文件检查时,我总是手头有一个
fqnSymbol

我提出要求在这方面提供更好的文档。

当创建边(即E的实例)时,连接点存储在两个端点(顶点):

我的理解是,如果边是E的直接实例,那么这些端点就是名为
out
in
的属性。(类似地,如果它们是某些子类的直接实例,例如E的EE,那么它们将被命名为
out\u EE
in\u EE
)通常这些细节并不重要(例如,outE()收集所有输出边),但有时它们确实重要(例如在定义属性约束时)

关于多重性约束:

我只需要从fqnSymbol到文件检查的一个链接

可以使用“最小值”和“最大值”强制执行此约束(至少在一定程度上):

alter property fqnSymbol.out_ MIN 1;
alter property fqnSymbol.out_ MAX 1;
(幸运的是,最小和最大约束不会首先阻止创建fqnSymbol顶点:-)

更严格的执行可能需要编写挂钩或触发器

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