Za każdym razem, gdy potrzebuję zaprojektować nową bazę danych, spędzam sporo czasu, zastanawiając się, w jaki sposób powinienem skonfigurować schemat bazy danych, aby zachować dziennik inspekcji z zmian.Projektowanie bazy danych do rejestrowania kontroli
Niektóre pytania były już zadawane tutaj na ten temat, ale nie zgadzam się, że istnieje pojedynczy najlepszym rozwiązaniem dla wszystkich scenariuszy:
- Database Design For Revisions
- Best design for a changelog auditing database table
- Ideas on database design for capturing audit trails
Natknąłem się również na to interesting article on Maintaining a Log of Database Changes, które próbuje wymienić pro i przeciw eac h podejście. Jest bardzo dobrze napisany i ma interesujące informacje, ale jeszcze bardziej utrudniał mi podejmowanie decyzji.
Moje pytanie brzmi: Czy istnieje odniesienie, że mogę używać, może książka lub coś podobnego drzewa decyzyjnego, że mogę odnosić się zdecydować, w którą stronę mam iść na podstawie niektórych zmiennych wejściowych, takich jak:
- dojrzałość schematu bazy danych
- Jak dzienniki będzie odpytywany
- prawdopodobieństwo, że będzie trzeba odtworzyć rekordy
- Co ważniejsze: zapis lub odczyt RLM rformance
- charakter wartości, które są rejestrowane (String, liczby, Blobs) przestrzeni
- Storage dostępnych
metod, które znam są:
1. Dodawanie kolumn do tworzone i zmodyfikowane data i użytkownik przykład
Tabela:
- id
- wartość_1
- wartość_2
- VALUE_3
- CREATED_DATE
- modifed_date
- created_by
- modified_by
Główne zalety: Tracimy historię zmian. Nie można wycofać po zatwierdzeniu.
2.Wstawić tylko tabele
- ID
- value_1
- wartość_2
- VALUE_3
- z
- do
- usunięty (typ logiczny)
- użytkownik
Główne zalety: Jak zachować klucze obce na bieżąco? Ogromna przestrzeń potrzebna
3. Tworzenie osobnej tabeli Historia dla każdej tabeli
przykład stół Historia:
- id
- wartość_1
- wartość_2
- VALUE_3
- value_4
- użytkownik
- usunięte (logiczna)
- datownik
Główne wady: wymaga powielić wszystkie tabele zbadane. Jeśli schemat się zmieni, będzie potrzebne migrację wszystkich dzienników.
4. Tworzenie skonsolidowanej Historia tabela dla wszystkich tabel
przykład stół Historia:
- table_name
- pole
- użytkownik
- new_value
- usunięte (logiczna)
- Znacznik czasu
Główne zalety: Czy będę w stanie odtworzyć zapisy (wycofywanie), jeśli będą potrzebne w łatwy sposób? Kolumna new_value musi mieć duży ciąg znaków, aby mogła obsługiwać wszystkie typy kolumn.
pokrewne: http://stackoverflow.com/questions/9852703/store-all-data-changes-with-every-details-stackoverflow-like – Kaii
i co na temat korzystania z bazy historii zamiast tabel? – Jowen
Może możesz sprawdzić projekt https://github.com/airblade/paper_trail – zx1986