Witam,
Zastanawiam się nad rozwiązaniem takiego problemu:
Weźmy przykład tabeli klienci, *faktury *i pozycje faktury gdzie wszystko jest jasne - pozycja faktury musi dodana do faktury która jest wystawiona dla danego klienta. Dane nie mogą być skasowane.
A co w przypadku jeśli wymaganie mówi że, pozycja faktury musi być wystawiona dla istniejącej faktury i danego klienta ale później mamy mieć możliwość usunięcia klienta z bazy jak i faktury pozostawiając pozycje faktury tak by przedstawiała cały czas np numer faktury i nazwę klienta czyli jakąś wybraną informacje z tabel klienci i faktury (choć rekordy zawierające pełny opis zostały już skasowane) a po jakimś czasie usuwamy również i pozycje.
Wiem przykład nie realny ale to tylko przykład który mi się wydał najprostszy do zrozumienia o co mi chodzi.
W takim wypadku dodając pozycję zawsze muszę dodać informację o nazwie klienta i numerze faktury do pozycji:
- dodając kolumny do pozycji faktury i kopiując nazwę klienta i numer faktury mamy duplikacje danych (tym bardziej jeśli mamy klienta który złożył tysiące faktur),
- tworząc dodatkowe tabele do których będzie kopiowana nazwa klienta raz i łączona z pozycjami poprzez relacje unikamy duplikacji (klient skopiowany raz z tabeli klienci i łączony z pozycjami poprzez relacje z dodatkową tabelą), tak samo dla numeru faktury. Jeśli klient zostanie usunięty z bazy to pozycja w dodatkowej tabeli pozostanie więc pozycje faktury wciąż wyświetlą wymagane informacje,
- można nie kasować rekordów z tabeli klienci i faktury a tylko ukrywać je ustawiając np flagę, ale jeśli namy jakieś restrykcyjne pole np nazwisko jako unique to nie możemy dodać nowego z tym samym a ukryty rekord może blokować dodanie nowego.
Jakie macie inne rozwiązania na taki problem?