使用linklist
,linkmap
或edge
来存储我的顶点之间的关系有什么优缺点?
答案 0 :(得分:11)
边缘定义两个顶点之间的关系。例如,您定义两个顶点,Person和Car。然后定义边缘驱动器。该边缘将两个顶点连接在一起。 "简"驱动"福特"。
链接列表是与另一个类关联的类的列表。 Car类可能包含Part类中的部件链接列表。汽车由多个部分组成。
linkmap是键的映射,类值与另一个类相关联。汽车类可能有PartType,Part的链接映射。汽车由多个部件组成,可按发动机,车身,底盘等分组。
答案 1 :(得分:0)
到达的时间有点晚,但是我最近正在寻找这个答案,并弄清楚了一点。
OrientDB中的链接在关系数据库世界中提供了等效的外键关系。如果您将表视为类,则链接将在两个类之间连接
他们在http://orientdb.com/docs/3.0.x/sql/SQL-Introduction.html下的“ 3.0手册”和“没有加入”部分中声明
SELECT * FROM Employee WHERE city.country.name = 'Italy'
他们在手册中没有告诉您的是这些是来自链接表而不是来自图关系。
要使它在Graph技术中起作用,首先需要创建一个边。我会像locatedIn
这样标记
Employee => `locatedIn` => City
还有城市记录的边缘
City => `ofCountry` => Country
那么基于图形的OrientDB查询可能是
SELECT * FROM Employee WHERE out(“locatedIn”).out(“ofCountry”) = “Italy”
您可能会认为,这看起来要复杂得多。是的。但是,请稍后再说该雇员的另一个名为salesTerrotiry
的Edge关系
是由其他人添加的,则可以像这样遍历和发现
TRAVERSE * FROM Employee MAXDEPTH = 2
在该处您将发现新的salesTerritory
边。在这里,使用Graph DB可以轻松发现几乎任何深度的临时关系。如果已在关系数据库中实现了此功能,则需要探索新FK的架构。可行,但要复杂得多。