Это может быть полезно различать обязанности исполняющих ограничение и выполняет ограничение.
Neo4j позволяет индексы и ограничения, связанные с метками. Индексы и ограничения, созданные для метки, используются для индексации и ограничения узлов, имеющих эту метку. Начиная с version 2.2.5 существует только один тип ограничений: ограничение единственности для одного свойства. Были разговоры о добавлении ограничений для комбинаций свойств и для отношений, но я не знаю статуса этих разговоров.
Ограничения схемы Neo4j соблюдение что-то, но они не будут выполнять , в смысле изменения ваших операций в базе данных, чтобы удовлетворять ограничению. Если бы были ограничения, обеспечивающие, что узел с меткой A
может быть создан только в том случае, если он имеет отношение типа R
к узлу с меткой B
, они блокировали бы вашу операцию, если бы она не удовлетворяла этому ограничению, но они не удовлетворяли бы ее для вы.
Наилучший способ достижения этого: a) удовлетворить это требование в клиентском приложении или b) создать расширение для Neo4j. Для примера расширения рассмотрите neo4j-uuid от Stefan Armbruster.Он прослушивает транзакции (используя то, что называется TransactionEventListener
), и гарантирует, что любой узел, созданный в базе данных, имеет UUID. Это расширение удовлетворяет, что может быть только принудительным с помощью соответствующего ограничения схемы Neo4j (существуют и другие отличия, например ограничение ограничивается областью метки).
Способ достижения вашего намерения может состоять в том, чтобы либо создать расширение, которое прослушивает то, что вы пишете в базу данных, и удовлетворяет вашему ограничению, изменяя при необходимости свои операции; или тот, который обеспечивает целевую задачу вызова на сервере (конечную точку RESTful), которую вы можете вызывать, когда хотите создать узел с определенной меткой. Затем расширение создаст узел и другие элементы, необходимые для выполнения вашей схемы. Недостатком первого может быть накладные расходы на прослушивание всех ваших операций, недостатком последнего может быть то, что он прерывает ваш поток взаимодействия с базой данных, чтобы ввести отдельный тип вызова (например, если вы обычно выполняете операторы cypher и должны приостановить выпуск отдельного запроса POST
и интерпретировать ответ до продолжения).
Что означает, что Существа подчиняются отношениям? «Узел-тип» означает узел с меткой? – jjaderberg
Похоже, вы хотите создать ограничение на ярлык, обеспечив, чтобы узлы с этим ярлыком имели отношение определенного типа к определенному узлу (или к любому узлу с определенной меткой). Это то, что вы хотите? – jjaderberg
@jjaderberg да, это звучит примерно правильно. Я не слышал о ограничениях на метки. спасибо – Zuriar