JanusGraph的schema主要是由edge label(边),vertex label(顶点)和property key(属性的键)组成。edge label和vertex label可以拥有多个property。edge label的property的cardinality属性只能是SINGLE。
JanusGraph支持显式和隐式定义。官方建议显式定义schema,可以提供协同开发效率。edge label,vertex label,property一经定义是不能修改和删除的(但提供了修改名称的方法),主要是为了保证模型的稳定性。
一、定义Edge Label
Edge(边),定义两个顶点间的关系,edge label的名称在一个图中必须是唯一的。JanusGraph提供一个builder方法创建edge label,这个builder还提供了一个方法定义边的多重性(mulitiplicit)。边标签的多重性定义了该标签的所有边上的多重性约束,即顶点对之间的最大边数。
1. 边标签的多重性
MULIT: 允许多条相同标签的边在两个顶点之间,即多重图,边的多重性没有约束。
SIMPLE: 只允许给定的标签在顶点对之间是唯一的。
MANY2ONE:在一个图中,允许给定的标签在任意顶点上只有一条传出边(outgoing edge),而不对传入边(incoming edge)施加限制。举例,父子关系,儿子只有一个父亲,而父亲有多个儿子。
ONE2MANY:与MANY2ONE相反,允许给定的标签在任意顶点上只有一条传入边(incoming edge