Как иметь ограничения в базе данных графа, такие как orientDB? - PullRequest
0 голосов
/ 28 февраля 2020

Я из мира RDBMS. так что прости, если я задам плохо сформулированный вопрос.

У меня есть ситуация, когда мне нужно обеспечить уникальные или частичные уникальные данные для заполнения внутри cayley

В СУБД, таких как postgres, я могу построить таблица, подобная этой:

  • первичный ключ автоинкремента с именем id
  • таблица внешнего ключа к персоне с именем person_id
  • таблица внешнего ключа к продукту с именем product_id
  • foreignkey к таблице цен с именем price_id
  • логическое поле с именем is_removed

Если я хочу, чтобы уникальное ограничение, например вся таблица, могло иметь уникальный индекс, такой, что product_id и price_id вместе в паре должен быть уникальным, я могу сделать это.

, если я хочу частичное уникальное ограничение в postgres, где, если is_removed имеет значение False, то person_id, product_id и price_id являются уникальными.

Затем, если какой-либо из внешних ключей имеет значение null, ограничения не срабатывают.

Как мне получить что-то такое внутри базы данных графа, например orientDB? * 10 25 *

Моя цель - предотвратить создание нелегальных отношений в базе данных

1 Ответ

1 голос
/ 28 февраля 2020

В orientDB вы можете определить схему для вашей базы данных. У вас есть классы вместо таблиц. Вершины и ребра являются специализированными классами. Вы можете определить свойства для классов и определить ограничения для свойств.

В качестве конкретного примера, определение для класса вершин пользователя:

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

...