Можно ли ограничить кратность ребер в Neo4j / OrientDB?

Мне было интересно, предоставляют ли Neo4j и OrientDB возможность определения ограничений с точки зрения кратности для определенных типов ребер?

2 ответа

Для OrientDB

Вы можете установить кратность на выходе / в коллекции на этикетке. Пример для установки максимум 1 ребра от Person to Company, если метка ребра "workFor":

ALTER PROPERTY Person.out_workFor NOT NULL
ALTER PROPERTY Person.out_workFor MAX 1

Вы также можете установить минимум с помощью:

ALTER PROPERTY Person.out_workFor MIN 1

Таким образом, с min & max обязательно иметь одно-единственное отношение к компании.

Для Neo4j

Что вы хотите сделать, если ограничение нарушено? Exception & Rollback или как-то слить?

Для 1:1 кардинальности есть слияние

MATCH (p:Person {name:"Pablo"})
MATCH (c:Company {name:"Era7"})
MERGE (p)-[:WORKS_FOR]->(c);

Для более высоких ограничений мощности вы можете использовать платформу, которая поддерживает метамодели и схемы, такие как http://structr.org/ или sylvadb.

Или вы можете установить небольшой обработчик tx-событий, который проверяет ваш кардинальность и вызывает исключение, если вы нарушаете ограничения.

Я все равно хотел написать в блоге об этом, так что следите за обновлениями.

Другие вопросы по тегам