我来自RDBMS世界。所以请原谅我问一个措辞不佳的问题。
我有一种情况需要确保cayley内部唯一或部分唯一的填充数据
在RDBMS(例如postgres)中,我可以建立一个这样的表:
如果我想要一个唯一的约束,例如整个表可以有一个唯一的索引,以使product_id和price_id在一起,因为一对必须是唯一的,则可以这样做。
如果我想在postgres中使用部分唯一约束,如果is_removed为False,则person_id,product_id和price_id是唯一的。
然后,如果任何外键为null,则不会触发约束。
我如何在诸如orientDB之类的图形数据库中拥有这些东西?
我的目标是防止在数据库中创建非法关系
在orientDB中,您可以为数据库定义一个架构。您有类而不是表。顶点和边线是专门的类。您可以定义类的属性,也可以定义属性的约束。
作为一个具体示例,一个User顶点类的定义:
CREATE CLASS User EXTENDS V;
CREATE PROPERTY User.userId LONG;
CREATE PROPERTY User.description STRING;
CREATE PROPERTY User.screenName STRING;
CREATE PROPERTY User.lang STRING;
CREATE PROPERTY User.location STRING;
CREATE PROPERTY User.fetched BOOLEAN;
CREATE INDEX User.userId ON User(userId) UNIQUE_HASH_INDEX METADATA {ignoreNullValues: true};
CREATE INDEX User.description ON User(description) FULLTEXT ENGINE LUCENE METADATA {ignoreNullValues: true};
这些是有关SQL和模式操作的文档官方部分的链接:
http://orientdb.com/docs/3.0.x/sql/SQL-Create-Class.html
http://orientdb.com/docs/3.0.x/sql/SQL-Create-Vertex.html
http://orientdb.com/docs/3.0.x/sql/SQL-Create-Edge.html