Nie wiem, czy odpowiem na Twoje pytanie, ale najłatwiejsze w implementacji wydaje mi się następujące rozwiązanie:
1 klient łączy się z bazą i dostaje aktualne dane (lub dane, których mu brakuje)
2 na tych danych pracuje w trybie read (przegląda, filtrule, sortuje)
3 w momencie kiedy chce coś zmienić/dodać wykonuje to na bazie głównej, po czym wykonywany jest krok 1 i cykl zaczyna się od nowa.
W takim rozwiązaniu pozostaje Ci tylko w p. 3 sprawdzić, czy w momencie dodania/edycji dane w bazie głównej są takie jak lokalnie u klienta. (jeśli nie - zapytać usera co robić: zaktualizować u niego, czy dokonać zapisu mimo wszystko<niebezpieczeństwo utraty spójności>).
To jest tylko przykład. Tak na prawdę ten mechanizm trzeba by zaprojektować dla konkretnego systemu.
Przykład: system zarządzania plikami tekstowymi (twoja baza to lista plików + ich zawartość).
Rozwiązanie: jak wyżej, bez większych problemów.
Przykład2: typowy system do zarządzania szpitalem (wiele tabel i wszystkie jakoś powiązane za pomocą kluczy obcych)
Rozwiązanie: Przy zmienianiu jednej krotki możesz być zmuszony do sprawdzenia 100 innych (czy są takie jak na lokalu) żeby mieć pewność, że baza zachowa spójność. Ale i w tym przypadku, może się zdarzyć tak:
- klient 1 chce dokonać zapisu i sprawdza czy ok
- klient 2 j.w.
- klient 1 dostaje info, że może (dane się nie zmieniły)
- klient 2 j.w.
- klient 1 dokonuje zapisu
- klient 2 dokonuje zapisu (błąd - dokonał zapisu pomimo zmienionych danych w bazie głównej)
Napisz może dokładnie jakiego rodzaju jest to system, to będziemy mogli sensownie pogadać.
Ale ja bym się za to nie brał, jeśli to ma być tylko usprawnienie dla potencjalnych 2% userów z wolnym łączem.