![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 66 Pomógł: 11 Dołączył: 25.07.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam małą zagwozdkę dot. archiwizacji dokumentów, np.: umów. Otórz obecnie przechowuje w jednej tabeli umowy z klientami.
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. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.06.2025 - 23:08 |