在插入记录之前是否必须存在类?

时间:2016-02-28 17:03:41

标签: orientdb

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

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

如果无法创建此类动态类,是否可以检查模式中是否存在类,如果不存在,则创建它,然后继续创建记录?另一个问题是,如果可以接受,这样做是否合适,或者我是否应该总是手动定义架构?

1 个答案:

答案 0 :(得分: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示例,但使用其他支持的语言也可以采用类似的方法。

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