Oracle: ограничение, которое зависит от другой таблицы - PullRequest
1 голос
/ 20 января 2011

Извините за странный заголовок, не знаю, как назвать Q лучше.Итак:

У меня 3 таблицы.EntityA, EntityB, AB.Классическая реализация "многие ко многим".

Есть ли возможность создать ограничение, которое обязывает ВСЕГДА иметь хотя бы одно отношение между A и B.

Пример рабочего процесса:

a) Вставить A, Вставить B, вставить отношение, зафиксировать;SUCCESS
b) Вставить A, Вставить B, зафиксировать;FALSE

Итак, вопрос: есть ли триггер on commit?Или что-то похожее на.

Ответы [ 2 ]

2 голосов
/ 20 января 2011

Нет такой вещи как триггер ON COMMIT.Тем не менее, вы можете обычно моделировать поведение триггера ON COMMIT, используя материализованные представления.В вашем случае вы можете

  • создать журналы материализованного представления на трех таблицах
  • создать быстро обновляемое материализованное представление, объединяющее три таблицы
  • создать ограничениев материализованном представлении, которое вызывает исключение, если есть строки, которые не проходят проверку

При фиксации происходит обновление материализованного представления.Если ограничение на материализованное представление не выполняется, то фиксация завершается неудачей.

0 голосов
/ 20 января 2011

Вы можете установить отложенные ограничения для AB, которые будут проверять достоверность значений только при фиксации того же самого. Вы можете настроить PK таблицы AB в таблицах EntityA и EntityB для ссылок или наоборот (в зависимости от этого установите отложенные ограничения). Предполагая, что эти вставки находятся в пределах одной транзакции, вы, возможно, сможете развернуть изменения, если в таблицу AB не введена действительная запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...