2016-02-28 52 views
0

我来自Neo4j并评估OrientDB,并且我有一个关于类的简单问题 - 它们在插入记录之前是否必须存在?也就是说,在Neo4j中有'MERGE'命令,如果它不存在,它将更新或创建一个节点。类看起来大致等同于Neo4j的标签,如果在执行MERGE时不存在标签,它将被创建。 OrientDB中是否有类似的功能?目前,当我尝试插入一个不存在类的记录时,OrientDB会抛出一个异常,“在数据库中找不到类SOME_CLASS”。在插入记录之前,类是否必须存在?

我一直在阅读文档,试图获得各种可用数据模型的句柄,但在这个问题上我找不到任何明确的内容。我尝试过的一件事是添加一个集群,然后插入一个不存在的类的记录。这工作,并在OrientDB Studio,'DB'下,我看到记录数等于'1'的集群;但是,新记录的类别不会出现在“架构”下。

如果这种类型的动态类创建不可行,检查模式中是否存在类是否可以接受,如果不存在,创建它,然后继续创建记录?另一个问题是,如果可以接受,这样做是否好,还是我应该总是手动定义模式?

回答

0

如果您使用CREATE命令之一,则该对象被置于默认类中;例如:

CREATE VERTEX 
Created vertex 'V#9:0 v1' in 0.047000 sec(s). 

(在这种情况下,类是V。)

当然,如果你使用的INSERT INTO ...形式,那么你必须指定一个类。

所以也许你的第一个问题归结为是否有可能改变OrientDB顶点或边的类。

可以更改顶点的父类 - 参见 http://orientdb.com/docs/2.1/SQL-Move-Vertex.html - 但有一些重要的注意事项。

要测试某个类是否以编程方式存在,请参阅此SO条目: Check if class exists or not in orientdb

这给出了一个Java示例,但使用其他支持的语言也可能有类似的方法。

至于动态改变实体类的智慧 - 也许安全的答案是,如果你可以使用属性标签实现你想要的任何东西,那么使用标签。

相关问题