hallo,
ich habe eine Tabelle die folgendermaßen aussieht:
CREATE TABLE element (
id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
name VARCHAR(75) NOT NULL,
vater INT REFERENCES element);
nun kann man damit ja auch zyklen erstellen, z.b. ein element zeigt auf sich selbst, oder eben auch über beliebig viele zwischenelemente…
den 1. und damit auch einfachsten fall könnte man ja mit hilfe einer check-klausel abfangen. das problem sind eben die beliebig großen zyklen…
rekursive tabellenabfragen kenne ich schon (siehe „Bill of materials“-Beispiel, zu finden bei der beschreibung des select-statement’s).
die frage ist jetzt ob man einen trigger (AFTER UPDATE) erstellen soll, der mit hilfe der rekursion feststellt ob ein zyklus entstanden ist, oder nicht.
wird das vielleicht bei mehreren dutzend elementen dann ZU rechenintensiv? gibt es vielleicht ein statement mit dem man zyklenfreiheit definieren/erzwingen kann? hab dazu leider (noch) nichts gefunden…
mfg, micha