如何在诸如orientDB之类的图形数据库中具有约束?

问题描述 投票:0回答:1

我来自RDBMS世界。所以请原谅我问一个措辞不佳的问题。

我有一种情况需要确保cayley内部唯一或部分唯一的填充数据

在RDBMS(例如postgres)中,我可以建立一个这样的表:

  • 主自动递增密钥,称为id
  • 到称为person_id的人员表的外键
  • 产品表的外键称为product_id
  • 价格表的外键称为price_id
  • 布尔字段is_removed

如果我想要一个唯一的约束,例如整个表可以有一个唯一的索引,以使product_id和price_id在一起,因为一对必须是唯一的,则可以这样做。

如果我想在postgres中使用部分唯一约束,如果is_removed为False,则person_id,product_id和price_id是唯一的。

然后,如果任何外键为null,则不会触发约束。

我如何在诸如orientDB之类的图形数据库中拥有这些东西?

我的目标是防止在数据库中创建非法关系

orientdb
1个回答
0
投票

在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

http://orientdb.com/docs/3.0.x/sql/SQL-Create-Index.html

http://orientdb.com/docs/3.0.x/sql/SQL-Create-Property.html

© www.soinside.com 2019 - 2024. All rights reserved.