Hallo,
ich hätte eine Frage zu einem tabellenweiten UNIQUE constraint.
Ich habe eine Tabelle in der eine Baumstruktur (Gruppen mit Untergruppen) gehalten wird.
Um einfach Abfragen nach Gruppe mit ihren Untergruppen stellen zu können hat die Tabelle eine Spalte "path", die UNIQUE sein soll.
Die Spalte sieht in etwa so aus.
root 1
child1 1.1
child2 1.2
grandChild1 1.1.1
grandChild2 1.1.2
grandChild3 1.2.1
...
So, nun möchte ich z.B. child1 und child2 tauschen.
[pseudoSQL]
UPDATE child1 set path = '1.2' <- hier krachts schon
UPDATE child2 set path = '1.1'
[/pseudoSQL]
Ist klar, temporär ist path nicht UNIQUE. Ich dachte nun, wenn ich das in eine Transaktion packe, dann wäre das machbar, da constraints erst zu Ende der Transaktion geprüft werden.
Das ist wohl ein Irrglaube (ich nutze hier SQLite, kann aktuell kein anderes DBMS testen). Ist das eine SQLite Limitation?
Wie könnte man das umsetzen? Nur über einen temporären Wert, a là ...
[pseudoSQL]
UPDATE child1 set path = '1.X' <- unique
UPDATE child2 set path = '1.1' <- unique
UPDATE child1 set path = '1.2' <- unique, Tausch erfolgreich
[/pseudoSQL]
... bzw. mit DELETE und REINSERT (dann krachts aber evtl. mit referentieller Integrität).
Ideen?
Danke im Voraus!
Bye
P.S.:
Hab beim Posten diese Meldung bekommen:
"Der Text enthält drei oder mehr gleiche Zeichen hintereinander oder enthält keine Satzzeichen (-2.00 Punkte). Sind Sie sicher, dass Sie das Posting so abschicken wollen?
Der Betreff enthält nur große Buchstaben (-3.00 Punkte). Sind Sie sicher, dass Sie das Posting so abschicken wollen?"
Mindestens die 2. "Anschuldigung" ist ungerechtfertigt.