Pytania dotyczące baz SQL

0

Witam,

Mam kilka pytań dotyczących baz danych działających w oparciu o silnik SQL. Posiadam doświadczenie w programowaniu bazodanowym poprzez API Betrieve/Pervasive. Chodzi mi o uzyskanie informacji pozwalających na przeniesienie kodu z API na SQL. Biorę pod uwagę darmowe bazy FireBird, PostgrSQL. I tak:

  1. W jaki sposób w bazach SQL realizuje się mechanizm blokowania rekordu do edycji przez innego użytkownika. Chodzi np. o edycję jakiegoś rekordu i o oto aby inny użytkownik nie mógł edytować tego rekordu, gdy jest on edytowany przez kogoś innego.

  2. W jaki sposób sprawdzić i poinformować użytkownika, że inna osoba jest w trakcie edycji danego rekordu. Chodzi o to, żeby nie rozpoczynać edycji stanu, który i tak może ulec zmianie w wyniku działań innego operatora.

  3. W jaki sposób zablokować do edycji kilka rekordów w danej tabeli, np pozycje magazynowe, których ilości należy zmodyfikować podczas księgowania dokumentu zakupu / sprzedaży

  4. Jaki jest zakres działania transakcji. Dotyczą one pojedynczej tabeli, czy też jednocześnie kilku tabel. Posługując się przykładem z pkt. 3. może się okazać, że w magazynie nie ma wystarczającej ilości towaru i dokument sprzedaży trzeba anulować, jednocześnie korygując tabele pozycji magazynowych i stanów magazynowych.

Z góry dziękuję za odpowiedzi.
Prosiłbym o fragmenty kodu realizującego w/w tematy w SQL.

0

Pytanie widzę ogólnie o blokowanie

http://4programmers.net/Forum/459822?h=#id459822

  1. Są conajmniej 2 sposoby ... j.w.
  2. j.w.
  3. Ja by blokował wówczas nagłówek pozycji.
  4. Zależy od bazy. O Postgresie wiem nie wiele. W FB jest to zrobione IMHO jak należy. Zdajesie tylko transakcje zagnieżdzone są dopiero w jakiejś nowszej wersji. Innymi słowy nic nie stoi na przeszkodzie aby "dotyczyły kilku tabel jednocześnie".
0

Dzięki bObik za informacje, Przedstawiona przez Ciebie metoda wygląda na uniwersalny i skuteczny system.

W jaki sposób sprawdzasz aktywność sesji ?

0
f-c-s napisał(a)

Dzięki bObik za informacje, Przedstawiona przez Ciebie metoda wygląda na uniwersalny i skuteczny system.

W jaki sposób sprawdzasz aktywność sesji ?

Nie jest to może rozwiązanie najbardziej szczęśliwe - końcówka użytkownika co zadany interwał robi update'a na tabelce z sesjami że jest aktywna (wstawiany jest tam bieżący czas). A więc aktywność sprawdzam w ten sposób że porównuje ten czas z bieżącym i jak jest większy niż zadany interwał + ~10% to znakiem tego że sesja jest nie aktywna. Oprócz tego jest oczywiście coś co pozwala stwierdzić że sesja się zakończyła (różnie to robie, pole status albo pole z czasem zakończenia pracy).

Do tego proponowanego przeze mnie mechanizmu ostatnio dołożyłem jeszcze jedną rzecz. Mianowicie coś takiego jak blokady stałe. Innymi słowy taki "Check in" "Check out" w terminologii systemów zarządzania wersjami. Do tabeli BLOKADY dołożyłem pole z typem blokady. Różnica jest taka że blokada stała nie jest automatycznie usuwana przy sesjach o statusie innym niż aktywna. Blokada stała pozwala zablokować zasób na czas kilku sesji i akurat u mnie znalazła zastosowanie.

Pozdrawiam

0

Dzięki bardzo za informacje.

Pozdrawiam

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