Tabela contracts (id,id_contractor, dateFrom, dateTo, .... ), natomiast samą treść trzymałem w pliku, szybko się jednak okazało, że treść umowy się momentalnie zmieniała co pewien czas i niestety powstał mi bajzer, ponieważ cześć zawartych umów była wystawiona wg. starszych wersji. Mało tego zaistniała sytuacja, że dział kadr będzie musiał mieć dostęp do tych umów w ich w prawidłowych wersjach. szit! Naszczęście dzięki svn będę mógł uzyskać wszystkie zmieniające się wersję i jakoś uda mi się uporządkować ten bajzer

Problem jest taki, że mam wystawioną umowę (na podstawie szablonu X) i jest ona dajmy na to wystawiona na 1 rok. W ciągu roku praktycznie wszelkie dane w tej umowie mogą się zmienić (data, należność, etc) i pytanie w jaki sposób to utrwalić? Na myśl przychodzą mi dwa rozwiązania w tej chwili.
1. To zmieniany wiersz w tabeli contract powielić i dać mu aktualniejszą datę, wg:
Contract
id | id_klient | ... | data zawarcia | .. | wartość | ... | data_utworzenia |
21 | 333 | ... | 2013-04-04 | ... | 500,00 | ... | 2013-04-02 | <- bazowa umowa
44 | 333 | ... | 2013-04-04 | ... | 450,00 | .... | 2013-04-20 | <- umowa po zmianie
Takie coś można by było rozwiązać albo w aplikacji, albo w wyzwalaczu (dla update tabeli).
2. Albo utworzyć pomocniczą tabelę:
Table contract (id,number,id_contractor,...) //Bo te dane były niezmienne
Table contract_detail (id,id_contract, dateFrom, dateTo, amount, modified) //Tu byłyby dane mogące ulec zmianie
I teraz jeśli wystąpiłaby potrzeba zmiany, to podobnie jak w pkt. 1, dane byłyby dodawane jako nowy wiersz, i cała umowa była by łączona z najaktualnieszym polem modified. (albo w php, albo wyzwalacz).
Niestety w obydwu przypadkach pojawiają się mały problem, bowem mogą się zmienić dane klienta (np.: imię, adresy (korespond, zamiesz), czy takie dane trzymać też w tabeli contract, czy jakoś inaczej to zorganizować? Bo może być taka sytuacja, że jak będę identyfikował klienta po ID i coś się u niego zmieni to automatycznie przy wyciąganiu danych tabeli contract - dostanę podmienione dane, a niestety w pewnych przypadkach nie jest to wskazane.
Bo na chwilę obecną w bazie mam contract.id_contractor jest w relacji z tabelą person (w której mam wszystkie osoby występujące w bazie - tak dane pracowników, klientów, płatników, etc.)
Być może w takich przypadkach, warto się pokusić o dodatkową table z taki danymi, coś ala:
Table contract (id,number,id_contractor,...) //Bo te dane były niezmienne
Table contract_detail (id,id_contract, dateFrom, dateTo, amount, modified)
Table contract_person (id,id_contract, firstName, surname, ....) i tu powielać aktualne dane z tabeli (person)
Pewnie Was zanudziłem, ale jeśli ktoś ma jakieś sugestie lub propozycjie z góry dziękuję

P.S: przepraszam za błędy, ale staram się szybko pisać, a podpowiadanie literówek nie mi nie działa.