Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Archiwozowanie danych
Forum PHP.pl > Forum > Bazy danych > MySQL
Lysiur
Witam, mam pewną zagwozdkę - pewnie prostą, ale im więcej myślę tym gorzej wymyślam smile.gif

Mam sytuację taką, mam w bazie pacentów (patients), pacjent ma swoją kartę która składa się z masy opcji (patients_details - dane są składowane id| categoryCode | option(int) | value(Varchar) ), gdzie w categoryCode mam nazwę właściwości (jest ona w aplikacji tłumaczona na języki), w option (mam wartości z formularzy typu checkboxy), a w value mam wartości z pól tekstowych.

Mam teraz problem, ponieważ co jakiś czas tworzę pacjentowi zamówienie (PDF), zamówienie jest tworzone na podstawie jego aktualnej kartoteki. Dodatkowo wartość zamówienia może się z czasem zmienić w zależności od pogorszenia/poprawienia się stanu pacjenta. Potrzebuję z czasem mieć historię, np.: że pacjent miał wystawienie zamówienie na wartość XXX, oraz uchwyt do jego kartoteki z danego okresu. Mało tego, na podstawie już przygotowanego zamówienia (dane zamówienia + karta pacjenta), dokonuje selectów w innych tabelach.

Kombinuję jak rozwiązać dane zagadnienie. Myślałem by podczas tworzenia zamówienia tworzyć jakby cache kartoteki, np.: w postaci zesrializowanego obiektu - lub tablicy z danymi na którym mógłbym później łatwo tworzyć odpowiednie zapytania do innych tabel. Wtedy do zamówienia mógłbym wrzucać id 'cachu' i w zasadzie myślę, że byłoby okej. Jednak nie jestem do końca przekonany, czy trzymanie serialzowanego obiektu/tablicy w bazie jest dobrym rozwiązaniem. wydaje mi się, że wyciągnięcie jendego takie wiersza będzie wydajniejsze niż prasowanie za każdym razem patients_details.

Co mój pomysł ma sens, czy znacie jakieś lepsze rozwiązania?

Z góry dziękuję za odpowiedź.

buliq
Pomysł z mojej strony bez sensu, bo tracisz możliwość wyszukiwania w tych danych, ja bym stworzył tabelę archiwum i tam zapisywał dane z danego okresu( sumarycznie, albo jednostkowo jak wolisz). W tych danych często operacji nie będzie.
Lysiur
Czyli jeśli obrze rozumiem, to proponujesz defacto powielić strukturę tabeli i wrzucać tam dane, które uległy zmienie z jakimś numerem rewizji czy timestampem. Tylko teraz zastanawiam się w jaki sposób w przypadku (archiwizowania tylko zmian), wyłapać np.: że zgłoszenie z przed 6 msc było na bazie takiej kartoteki. W przypadku archiwizowania anych całościowych (poczas tworzenia zamówienia), to dało by radę to w rozsądny sposób wyciągnąć, ale nie bardzo widzę tą metodę przy nie całościowym podejściu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.