2010-12-09 13 views
0

Ich muss durch eine Datenbank gehen und ändern sie nach einer Logik. Das Problem sieht in etwa so aus. Ich habe eine Geschichte Tabelle in meiner Datenbank und ich muss ändern. Bevor ich etwas ändere, muss ich schauen, ob ein Objekt (das mehrere Zeilen in der History-Tabelle hat) einen bestimmten Zustand hat, zB 4 oder 9. Wenn es den Status 4 oder 9 hatte, muss ich die Zeilen zwischen den aktuell gefundenen überprüfen Reihe und der nächste Zustand 4 oder 9 Reihe. Wenn eine solche Zeile (zwischen diesen Zuständen) einen bestimmten Wert in einer bestimmten Spalte hat, mache ich etwas in der nächsten Zeile. Ich hoffe, das ist einfach genug, um Ihnen eine Idee zu geben. Ich muss diese Überprüfung für alle Objekte durchführen. Denken Sie daran, dass jedes Objekt überall in seinem Lebenszyklus verändert werden kann (natürlich bis es einen Endzustand erreicht).Erweiterte Datenbank Änderung "Skript" - wie es geht

Ich verwende einen SQL Server 2005 und Hibernate. AFAIK Ich kann Transact SQL nicht so kompliziert überprüfen! Was würdest du mir empfehlen? Bisher habe ich darüber nachgedacht, es als JUnit-Test zu machen. Dies hätte den Vorteil, dass Hibernate mir hilft, die Änderungen vorzunehmen, und ich würde Java für Listen und andere Datenstrukturen haben, die ich vielleicht brauche und die in SQL nicht existieren. Wenn ich es als JUnit-Test mache, verliere ich meine Mapping-Dateien nicht! Ich bin gespannt, welche Ansätze würden Sie verwenden?

Antwort

0

Ich denke, Sie sollten in der Lage sein, Cursor zu verwenden, um die komplizierten Prüfungen in SQL Server zu verwalten. Sie haben nicht erwähnt, wie häufig Sie dies tun müssen, aber wenn dies eine einmalige Sache ist, können Sie dies entweder in Java oder SQL Server tun, abhängig von Ihrem Komfortniveau.

Wenn diese Überprüfung bei jeder CRUD-Operation angewendet werden muss, ist vielleicht der Datenbank-Trigger der richtige Weg. Wenn sich die Logik im Laufe der Zeit häufig ändert, würde ich lieber die Checks in Hibernate schreiben, vorausgesetzt niemand wird die Datenbank direkt treffen.

+0

Kann ich Listen in SQL haben. Ich meine etwas, in dem ich meine Objekt-IDs zum Beispiel speichern kann? – Atticus

+0

Es gibt keine Listendatenstruktur in SQL, zumindest weiß ich es nicht, aber Sie können temporäre Tabellen erstellen, um die Datenliste zu speichern, sie zu bearbeiten und dann die temporären Tabellen zu löschen. – limc

+0

Ja, das ist eine gute Idee. Vielen Dank! – Atticus