Frage

habe ich eine hierarchische Struktur in einer Tabelle gespeichert. Jedes Element hat einen Zeiger auf seinen vorherigen, nächsten und ein Elternteil

create table CATALOGUE
(
  NAME VARCHAR2(300) not null,
  NEXT_ID NUMBER(38),
  PARENT_ID NUMBER(38),
  PREVIOUS_ID NUMBER(38),
  XID NUMBER(38)
);

Ich habe eine Java-Anwendung, die O / R-Mapping für den Zugriff verwendet und diese Tabelle ändern. Manchmal habe meinen Katalog beschädigt, z.B. sie sind Elemente verbunden, die nicht die gleichen Eltern haben. Ich frage mich, ob ich die Datenkonsistenz mit Oracle-Trigger oder andere reinen SQL-Technik (ohne Java-Code) sicherstellen kann.

Ist der „der richtige Weg“, Dinge zu tun?

Wie kann ich implementieren einen Trigger? Ich kann eine gespeicherte Prozedur implementieren, die meine Tabelle validieren würde. So etwas wie

select count(*) 
from catalogue c1, catalogue c2 
where c1.next_id = c2.previous_id and c1.parent_id != c2.parent_id

sollte 0 zurück.

Aber wie kann ich es fordere begehen? Ich will nicht, dass es auf jeder Zeile Update nennen, kurz vor dem Festschreiben mit einer Möglichkeit beendete rückgängig zu machen, wenn meine Tabelle nicht gültig ist.

War es hilfreich?

Lösung

Es kann möglich sein, dies zu erzwingen durch eine Kombination aus einer materialisierten Ansicht (MV) und eine Einschränkung für die MV wie ich beschrieben habe, hier in meinem Blog .

Die Idee wäre, eine MV zu schaffen, dass nur Ausnahmen von der Regel gehalten und dann eine Einschränkung zu haben, dass immer versagt, wenn eine Zeile in die MV eingegeben wird. So etwas wie folgt aus:

create materialized view check_mv
refresh complete on commit as
select 1 dummy
from catalogue c1, catalogue c2 
where c1.next_id = c2.previous_id and c1.parent_id != c2.parent_id

alter table check_mv
add constraint check_mv_chk
check (1=0) deferrable;

Andere Tipps

Im Idealfall sollten Sie ein Paket schreiben, die zu 100% in der Kontrolle ist diese Tabelle aufrecht zu erhalten. Wenn nötig, setzen Sie es in einem eigenen Schema, Sperre nach unten Privilegien auf, und verwenden Sie nur dieses Paket die Tabelle zu ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top