zastanawiałem się ostatnio nad pewnym problemem, a mianowicie jak zapisywać dane w tabeli z zapamiętywaniem stanów poprzednich.
Prosty przykład
mam tabelę kontrahenci z kolumnami idKontrahenta, nazwa, adres
oraz drugą tabelę faktury z kolumnami idFaktury, idKontrahenta, data, ....
i teraz dodaję kontrahenta i wystawiam mu faktury.
Po jakimś czasie kontrahent zmienił adres, czyli robię update na tabelę kontrahenci.
Ale niestety powstaje problem, zostaną zmienione dane w już wystawionych fakturach co jest niewłaściwe.
Rozwiązanie jakie wymyśliłem:
do tabeli z kontrahentami dodaje dwie dodatkowe kolumny: dataOd oraz dataDo które zrazem z idKontrahenta są kluczem głównym.
Robiąc UPDATE de facto tworzę kolejny rekord zmieniając odpowiednio daty
Czyli np.
po dodaniu kontrahenta mam jeden rekord:
idKontrahenta,dataOd,dataDo, nazwa, adres
1 , 01.01.2012, 00.00.0000, 'nazwa 1', 'adres 1'
natomiast po UPDATE mam dwa rekordy
1 , 01.01.2012, 02.02.2012, 'nazwa 1', 'adres 1' <-- rekord historyczny
1 , 02.02.2012, 00.00.0000, 'nazwa 1', 'adres 2' <-- aktualny rekord
Robiąc SELECT z tabeli faktury(złączenie z kontrahentami) muszę dodatkowo uwzględnić przedział czasowy.
Do robienia INSERT'a i UPDATE oczywiście muszę napisać odpowiednie procedury.
takie rozwiązanie ma pewną poważna wadę,a mianowicie nie mogę użyć auto inkrementacji :/
Czy takie rozwiązanie jest dobre/sensowne ? są jakieś lepsze

