# Designfrage: DB-Daten direkt oder verzögert speichern



## Tallan (13. Nov 2009)

Hallo zusammen.


Ich habe eine JTable in der der User Daten verändert, diese Daten werde beim start des Programms aus der DB eingelesen und sollen in geänderter Form wieder in die DB geschrieben werden.

Jetzt gibt es mehrer möglichkeiten wann man die Daten in die DB schreibt.

1) Direkt wenn der User ein Feld in der Tabel geändert hat.
    Vorteil : wenn mal was kracht ist nur die letzte Änderung verloren
    Nachteil : viel mehr DB-Zugriffe, Netzwerktraffic....
2) Wenn der User mit der überarbeitung der Tabel fertig ist.

Wie ist hierbei das übliche Verfahren?


----------



## Prismapanda (13. Nov 2009)

Da gibts denke ich mehrere Faktoren, die das entscheiden. In meinem letzten Prog der Art habe ich Lösung 1) verwendet. Der Grund dafür war, dass der Benutzer wirklich viele (>300) Datensätze durcharbeiten und evtl. ändern musste. Zuerst hatte ich dies so realisiert, dass er die Änderungen vornimmt und zum Schluss speichert, aber da die Bearbeitungszeit so extrem lange war, bestand halt die Gefahr, dass bei einem Fehler etliche Arbeitszeit auf das Wiederholen der Eingaben fiel.

Deshalb tendiere ich meistens zum direkten Schreiben. Du solltest aber die Änderungen nicht im EDT ausführen, wenn das Update länger dauern könnte, sonst macht das dein System träge. Da wär dann n Thread Queue ganz nett (Executor?).
Diese Lösung bietet sich IMO immer dann an, wenn es nur kleine Änderungen sind, die keine Abhängigkeiten zu anderen Änderungen haben.

Du bekommst ja bspw. Probleme, wenn eine Änderung eine Schlüsselbeziehung verletzt, die du im nächsten Schritt aber beheben möchtest (z.B. Unique Constraints). Bei solchen transaktionalen Änderungen, solltest du Lösung 2) in Betracht ziehen.

Ist halt sehr spezifisch, je nachdem wie deine Daten aussehen, welche Abhängigkeiten sie habe, ob sie validiert werden müssen etc. etc.

Für den Benutzer ist aber denke ich 1) bequemer und sicherer vor Abstürzen.


----------



## tfa (13. Nov 2009)

Ich finde, die Daten sollten dann gespeichert werden, wenn der Benutzer das wünscht. Dies kann am Ende eines langen Editiervorgangs sein oder mittendrin. In einem Texteditor, einer Tabellenkalkulation oder Textverarbeitung ist das ja nicht anders.

Wenn man Angst hat, wegen Abstürzen Daten zu verlieren, sollte man vielleicht erstmal die Probleme mit der Software in den Griff bekommen.


----------

