Teoria relacji - rozważanie

0

Witam. Problem jest czysto akademicki, i dotyczy tylko moich rozważań.

Załóżmy hipotetyczną prostą bazę danych obsługującą firmę handlową. Baza miałaby za zadanie:

  • ewidencję zakupów i sprzedaży (przechowywałaby informację o fakturach zakupu i sprzedaży)
  • ewidencję stanów magazynowych.

Konkretnie mój dylemat dotyczy tabeli reprezentującej magazyn.

W najprostszej postaci, taka tabela będzie miała postać:

MAGAZYN:

  • id_towaru
  • nazwa_towaru

i - problem - czy w tej tabeli powinna się znaleźć kolumna "ilość_towaru"?

Na zdrowy rozum - tak.
Z drugiej jednak strony, towar w magazynie nie bierze się znikąd i nie rozpływa się w powietrzu - aktualny stan magazynowy jest przecież wypadkową wszystkich faktur zakupu i sprzedaży.
Z trzeciej strony - faktur mogą być przecież olbrzymie ilości, zaś cały system może funkcjonować latami - i przeszukiwanie takiej bazy może być kłopotliwe w pewnym momencie.
Z czwartej strony - jeżeli przyjmiemy, że zapisujemy w bazie ilość towaru, to co jeżeli w pewnym momencie (na skutek np. jakiejś awarii w krytycznym momencie przetwarzania zapytania, (tak, wiem co to są transakcje)) liczba zapisana w bazie będzie różna, niż liczba wynikająca z zapisanych faktur?

Jak to jest rozwiązane w rzeczywistych systemach?

0
yakhub napisał(a)

Z czwartej strony - jeżeli przyjmiemy, że zapisujemy w bazie ilość towaru, to co jeżeli w pewnym momencie (na skutek np. jakiejś awarii w krytycznym momencie przetwarzania zapytania, (tak, wiem co to są transakcje)) liczba zapisana w bazie będzie różna, niż liczba wynikająca z zapisanych faktur?

jak wiesz co to sa transakcje, to wiesz rowniez ze powinny spelniac warunek ACID (atomicity, consistency, isolation, durability). I to wlasnie consistency jest za to odpowiedzialne, zeby taki stan nie powstal. Jesli masz dobrze baze zaprojektowana, to w takim przypadku zostanie uruchomniony tzw. "rollback" i wszystko wroci do stanu jaki byl przed rozpoczeciem transakcji.

0

Różnie jest to realizowane, ale zazwyczaj nie obejdzie się bez dodatkowej tabeli z zapisami wartości w danym momencie czasu, którą używa się do tworzenia np. raportów itp.

0
  1. jest jeszcze coś takiego jak partia towaru
  2. czemu zakładasz, że magazyn jest tylko jeden
  3. id_towaru, id_magazynu, ilość, partia

oczywiście stany na magazynie są aktualizowane automatycznie przez wyzwalacze więc jak się rypnie zapis dokumentu to i aktualizacja stanu zostanie odwołana

załóżmy, że masz 1000 towarów, dziennie każdy przychodzi i wychodzi na ok 100 dokumentach i teraz pomyśl sobie po pół roku chcesz znać stan towaru x na magazynie y - ile musisz obrobić dokumentów :>

0

Stany magazynowe i tak trzeba liczyć, aktualny stan magazynu nie jest saldem wszystkich wprowadzonych dokumentów, jest saldem dokumentów z datą wystawienia wcześniejszą niż "teraz", w piekarniach, mleczarniach itp. powszechne jest wystawianie dziś dokumentów rozchodowych na towar, który pojedzie do klienta jutro rano. Aby nie liczyć zawsze od początku świata warto przewidzieć specjalną tabelę, (STAN) do której jest zapisywany co pewien czas stan magazynów liczony na podstawie wszystkich dotychczasowych dokumentów. Warto zapamiętać najwyższy ID dokumentu, oraz najpóźniejszą datę dokumentu użytych do obliczenia tabeli STAN.

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