Synchronisierung Datenbankabfragen verschiedener Tabellen

chaochazz

Neuer Benutzer
Beiträge
3
Hallo!

Situation:
Ich arbeitete derzeit an einer Silverlight-Datenbankanwendung die sich über ein WCF-Service mit einer MSSQL-DB verbindet. Der Client ladetet sich mehrere Tabellen zu Beginn und arbeitet dann im "Offline-Modus" und hält die Tabellen dann als ObservableCollections im Speicher.

Es werden z.B. Mitglieder und Dienste sowie die Relation aus den beiden IDs Mitglieder Dienste gebildet, die angibt welches Mitglied an welchem Dienst teilnimmt, heruntergeladen.

Anforderung:
Da diese Kreuztabelle (Mitglieder Dienste) relativ groß ist und nicht alle Daten benötigt werden sollen die Datensätze aus dieser nur mehr "On Demand" heruntergeladen werden. Bsp.: Alle Mitglieder für einen Dienst;

Problem:
Falls ein Dienst bzw. ein Mitglied in der Zeit von einem anderen User geändert/neu angelegt wird kann es zu Synchronisierungsproblem kommen. Beispiel es wird ein neues Mitglied zu einem Dienst hinzugefügt, das in der anfänglich heruntergeladenen Mitglieder Tabelle nicht vorkommt.

Was ist jetzt der beste Lösungsansatz Nullreferenzen zu verhindern? Muss ich jetzt wirklich jedes mal die Tabellen Mitglieder und Dienste neu herunterladen? Lassen sich Nullreferenzen überhaupt verhindern? Wie wird so generell vorgegangen, als was wäre "Best Pratices"?

Vielen Dank für jede Hilfe
Liebe Grüße
Sigi
 
Werbung:
Ich würde vor einem schreibenden Zugriff eine Aktualisierung der Daten erzwingen und die neuen Daten direkt an die DB weiter geben. Lesen geht dann im Offline Modus aber Schreiben nur mit einem aktuellen Datenbestand. Sonst musst du möglicherweise unterschiedliche Bearbeitungsstände von unterschiedlichen Usern nachträglich synchronisieren, das klingt ekelhaft.
 
Vielen Dank für deine Antwort und deinen Lösungsvorschlag. Das mit dem Schreibenden Zugriff klingt schon sehr gut, dass das erzwungen wird!
Was ist aber für den Fall wie oben beschrieben (womöglich nicht ganz klar):
User A loggt sich ins System ein ladet alle Mitglieder und Dienste herunter. User B loggt sich jetzt ein und fügt ein neues Mitglied hinzu. Dieses Mitglied wird zu einem bestehenden Dienst hinzugefügt. User A öffnet jetzt diesen Dienst (mit der ID die er schon zu Beginn geladen hat) und bekommt jetzt ein Mitglied aus {Mitglied, Dienst} dass noch gar nicht existiert.
Ich frage mich jetzt wie man so am besten vorgeht, gibt es da ein "Rezept"? Weil in diesem Fall müsste doch zumindest das Miglied nachgeladen werden.
Wird dann in der Praxis so vorgegangen, dass sich z.b. die Liste dann einfach durch einen Eintrag erweitert wird?

Vielen Dank!
Lg Sigi
 
Praxiserfahrung habe ich leider bei sowas nicht.

Dein Problem tritt nur auf, wenn du Tabellen einzeln bei Bedarf nach lädst. Vieleicht solltest du bei jedem Nachladen von Informationen prüfen, ob die bereits geladenen Informationen noch aktuell sind oder so.

PS: Eigentlich ist das kein SQL Problem sondern eher ein Design Problem von Programmen :)
 
Werbung:
Das mit dem Nachladen habe ich mir auch schon gedacht - mit Timestamp z.B. Es ist vielleicht kein SQL-Problem, aber es sollte trotzdem irgendwie gelöst werden ;-)
Naja ich schreib hier auf jeden Fall noch wie ich es gelöst habe: Womöglich wird es eh alles Nachladen sein ;-)
Lg Sigi
 
Zurück
Oben