Obsługa wielodostępu od strony aplikacji

0

Witam,
w aplikacji GIS-owej z lokalną bazą danych robię dodatkową możliwość pracy z bazą zdalną. Baza zdalna to MSSQL. Poza konfiguracją połączenia do bazy nie musze robić właściwie nic więcej z bazą. Zapis i wszystkie operacje wykonywane są przez odpowiednie komponenty GIS-owe. Mam oczywiście możliwość korzystania z zapytań i wszystkich możliwość jakie daje baza. Obsługa bazy po stronie komponentów polega na zapisie najnowszych danych (nadpisywanie bez sprawdzania czy np. jakaś dana była modyfikowana przez kogoś innego - nie ma możliwości zmiany tego zachowania). Nie mam doświadczenia z wielodostępem stąd moje pytania czy a właściwie jak aplikacja powinna informować użytkowników, że dany projekt jest używany lub modyfikowany przez inne osoby. Zmiany w bazie będą pojawiać się dopiero po zapisie przez użytkownika a te nie są robione często. Jeden użytkownik mógłby otworzyć projekt, zmienić dane i wykonać zapis do bazy po pół godzinie (albo kilku godzinach). W tym czasie inny użytkownik mógłby również edytować te same dane i zapisać je chwilę później nadpisując zmiany poprzednika. W jaki sposób chronić się przed czymś takim. Czy zapamiętywać w jakiś sposób użytkowników korzystających z danego projektu i wyświetlać gdzieś komunikat, że ktoś jeszcze (ewentualnie pokazać kto) pracuje nad danym projektem w tym samym czasie? Czy blokować dostęp do edycji dla kolejnych osób i umożliwiać tylko pierwszej zalogowanej? (jeśli pierwszy użytkownik zamknie połączenie to czy przekierować prawo edycji do nastepnego w kolejce?) Czy informować przy próbie edycji/wyświetlania konkretnych wartości np. że ktoś ją zmieniał od ostatniego połączenia z bazą?
Mój problem pewnie jest banalny ale serio nie za bardzo wiem jak to ugryźć. Czy zostawić tak jak jest i niech się inni martwią żeby nie pracować czy edytować tego samego w jednym czasie - użytkownicy mogą być z różnych lokalizacji w kraju, nie mogą sobie powiedzieć "przez ścianę" co będą robić.
W bazie mam również zapewnić logowanie aktywności użytkownika. Nie wiem czy dało by radę to jakoś wykorzystać przy moim pierwszym problemie. Drugi problem to logowanie aktywności. Czy są jakieś założenia co powinno być logowane czy to kwestia indywidualna lub raczej klienta? Chodzi mi konkretnie czy każda aktywność/zmiana w bazie powinna zostać zalogowana czy np. jedna ostatnia, która będzie nadpisywać kolumnę np. ostatnia_zmiana. Użytkownik wpisze sobie wartość 5, za chwilę zmieni na 10 i wróci do 5. Czy takie zmiany powinny być odnotowywane? Jeśli ostatnia zmiana to wystarczyłaby mi stała ilość kolumna (czas, akcja, użytkownik), jeśli wszystkie akcje to chyba jakaś relacja do innej tabeli gdzie będę trzymał to jako osobne rekordy. Dobrze myślę? Będę wdzięczny za wszelkie wskazówki.

0

Wszystko to, co wymieniłeś da się zaimplementować, tylko czemu pytasz nas o wymagania funkcjonalne? Spytaj analityka biznesowego, swojego klienta, użytkowników, ogólnie ludzi, do których należą takie decyzje.

0

Chciałbym stworzyć coś w miarę uniwersalnego. Wiem, że wszystko jest do zrobienia tylko zastanawiałem się czy są jakieś dobre praktyki, schematy postępowania itp. które odnoszą się do obsługi wielodostępu. Jeśli nie ma czegoś takiego i wszystko jest indywidualną sprawą to dopytam klienta.

1

Najprostsza implementacja to klasyczne "last win", pytanie czy to spełni oczekiwania...

1 użytkowników online, w tym zalogowanych: 0, gości: 1