似乎有一种方法可以通过边缘约束来控制ODB中的多边形。
http://orientdb.com/docs/last/Tutorial-Using-schema-with-graphs.html(在底部)
边缘约束是使ODB不那么用户友好的可用性之一。
以下是从Titan手册中获取的一些多重类型(因为解释它们的方式很容易理解):
MULTI:在任何一对之间允许相同标签的多个边 顶点。换句话说,该图是关于的多图 这样的边缘标签。边缘多重性没有约束。
SIMPLE:在任何一对顶点之间最多允许此类标签的一个边缘。在 换句话说,图表是关于标签的简单图表。 确保边缘对于给定标签和顶点对是唯一的。
MANY2ONE:在任何顶点上最多允许此标签的一个输出边缘 在图中,但没有对传入边进行约束。边缘 标签母亲是一个MANY2ONE多样性的例子 人最多只有一个母亲,但母亲可以有多个孩子。
ONE2MANY:在任何顶点上最多允许此标签的一个传入边缘 在图表中,但没有限制外出边缘。边缘 label winnerOf是一个具有ONE2MANY多重性的例子 比赛最多由一个人赢得,但一个人可以赢得多个 竞赛。
ONE2ONE:最多允许一个传入边缘和一个传出边缘 在图中的任何顶点上的这种标签。边缘标签结婚了 ONE2ONE多样性的一个例子,因为一个人已婚 正是另一个人。
毋庸置疑,由于这种抽象,在Titan中创建边缘时实现这种多样性是相当简单直接的。在ODB中,它不是那么透明或简单。这与所讨论的所请求的可用性抽象一致in this issue on Github。
让我们看一下可能性,看看ODB是如何做到的(根据我对ODB的理解,这肯定不是很好,所以我可能是错的。请纠正我,如果我!)。
MULTI
这是ODB的标准重量级优势。因此,创建一个重量级边缘会自动遵循MULTI多重性规则。
SIMPLE
这似乎属于边缘的“UNIQUE”索引方法。但是,我不认为这是完全正确的,因为UNIQUE索引在两个顶点之间强制执行单个输入和输出。所以使用UNIQUE索引更像是ONE2ONE。我相信这可能相当于轻量级边缘,但增加了唯一索引。(?)
MANY2ONE
我相信这可以通过进出约束来完成。
ONE2MANY
与上述相同。
ONE2ONE
可通过UNIQUE约束。
所以,通过这个练习,我想我已经知道ODB可以涵盖所有多重性场景,但是,我绝对不确定。为什么我必须不确定?通过使用Titan使用的相同术语,可以简化整个概念。似乎抽象是必要的。我相信它会让ODB更容易理解。
也许这些建议值得考虑。 Starting from the Cars database example taken from the docs.
创建边缘类保持不变。
orientdb> CREATE CLASS Owns EXTENDS E
orientdb> CREATE CLASS Lives EXTENDS E
SIMPLE(标准的轻质边缘,但自动允许多个轻质边缘,这似乎比TItan高出一步!)
orientdb> CREATE EDGE Owns FROM ( SELECT FROM Person ) TO ( SELECT FROM Car )
MULTI(创建属性的边缘/重量边缘,必须输入和输出)
orientdb> CREATE MULTI EDGE Owns FROM ( SELECT FROM Person ) TO ( SELECT FROM Car )
MANY2ONE(不确定进出这里需要做什么)
orientdb> CREATE MANY2ONE EDGE Lives FROM ( SELECT FROM Country ) TO ( SELECT FROM Person )
ONE2MANY(与上述相同,不确定进出的情况)
orientdb> CREATE ONE2MANY EDGE Owns FROM ( SELECT FROM Person ) TO ( SELECT FROM Cars )
ONE2ONE(这是一个重量级边缘,具有自动UNIQUE约束)
orientdb> CREATE ONE2ONE EDGE Owns FROM ( SELECT FROM Person ) TO ( SELECT FROM Cars )
UNIQUE(附加约束,仅适用于轻量级边缘)
orientdb> CREATE UNIQUE EDGE Owns FROM ( SELECT FROM Person ) TO ( SELECT FROM Car )
说实话,在边缘方向限制或多重性方面,我真的不确定这涵盖了所有需要或想要的可能性。但是,我知道以上事实表明SQL对我来说更容易理解。这是像SQL这样的声明性语言的目标。在我看来,我们正在抽象出三件事。边缘类型创建(重量轻或重量重),边缘方向和多重性。
当我回顾我刚刚写的内容时,我想我不确定的是如何在ODB中实际创建多对一和一对多的边缘。
对此的任何其他想法和对我的想法的更正将不胜感激。
斯科特
答案 0 :(得分:0)