Najlepszy sposób zaprojektowania bazy danych i tabeli w celu prowadzenia rejestrów zmian?

16

Muszę skonfigurować funkcję historii w projekcie, aby śledzić wcześniejsze zmiany.

Powiedzmy, że mam teraz dwie tabele:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

Przykład: Mam wiersz w notatkach, a użytkownik chce zmienić wiadomość. Chcę śledzić jego stan przed zmianą i po zmianie.

Jakie byłoby najlepsze podejście do konfigurowania kolumny w każdej z tych tabel, która powie, czy element jest „stary”. 0 jeśli aktywne LUB 1 jeśli usunięte / niewidoczne.

Chcę również utworzyć AUDIT TRAILtabelę history ( ), która zawiera idstan poprzedni, stan idnowy, do której tabeli odnoszą się te identyfikatory?

Schwarz
źródło

Odpowiedzi:

5

Proszę zobaczyć

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

To bardzo dobra lektura na temat podejść do utworzenia ścieżki audytu w projekcie bazy danych. Ścieżki audytu są niezbędne do wdrożenia bazy danych. Zawsze powinna być widoczna akcja użytkowników bazy danych w systemie.

Możemy śledzić, które wiersze zostały zmienione w naszym systemie PTA (punkt w czasie), dodając niektóre standardowe kolumny PTA (punkt w czasie) do wszystkich tabel zainteresowania PTA.

Proponuję następujące:

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.
Zabijaka
źródło
jaki jest najlepszy sposób zastosowania „Rozwiązanie nr 2: Dedykowana tabela śledzenia danych” dla aplikacji OLTP.
AA.SC
Firma, dla której pracuję, używa obecnie wielu schematów, jednego specjalnie dla ścieżki audytu. Tabela audytu jest naprawdę dość prostym projektem przy użyciu rozwiązania nr 2 (dokładnie takiego, którego używamy tutaj w pracy). Podział różnych zadań (zaktualizowana tabela zapasów, zaktualizowane lub usunięte informacje o klientach, kredyty udzielone klientowi itp.) I zbuduj tabelę audytu na podstawie typowych działań, do których użytkownicy są zdolni. Czy to odpowiada na twoje pytanie dotyczące zastosowania rozwiązania 2 do db, jeśli nie, proszę wyjaśnij. Dzięki!
Hector
W rzeczywistości już kontrolujemy dane przy pierwszym podejściu przy użyciu tabel audytu, ale dane inspekcji stają się tak ogromne, a teraz chcemy przekonwertować nasze podejście, po prostu przechwytując dane w zmienionych kolumnach. Moje pytanie brzmi: jak mogę osiągnąć takie podejście? jaki jest najlepszy sposób śledzenia, która kolumna tabeli jest zmieniana? .. jeśli tabela ma więcej niż 20 kolumn, jedna z nich zawiera tekst DataType.
AA.SC
10

Podczas projektowania możliwości kontroli wersji w danych istnieje kilka minimalnych (jak sądzę) wymagań:

  • Każda wersja danych powinna być niezależna i niezależna od innych wersji. Oznacza to brak flagi lub innego wskaźnika wskazującego, która wersja jest aktualna, a która „historyczna”. Oznacza to również aktualizację encji oznacza wstawienie tylko nowej wersji - nie jest wymagana aktualizacja poprzednich wersji.
  • Unikaj tego, co nazywam Zależnością obejmującą wszystkie wiersze. W tym miejscu jedno pole (data_końcowa) wiersza musi pozostać zsynchronizowane z innym polem (data_początkowa) innego wiersza. Utrudnia to pracę z danymi i jest doskonałym źródłem anomalii.
  • Obecna wersja i wszystkie poprzednie wersje powinny znajdować się w tej samej tabeli. Dzięki temu można użyć tego samego zapytania, aby wyświetlić przeszłe dane „od” określonej daty i wyświetlić bieżące dane.
  • Klucze obce danych, które zostały wersjonowane, powinny działać tak samo jak normalne (niewersjonowane) dane.
  • Projekt powinien być tak prosty lub powszechnie rozumiany, aby krzywa uczenia się dla nowych programistów była zminimalizowana.

Oto slajdy prezentacji, które kilka razy zrobiłem na targach technicznych. Obejmuje to, w jaki sposób można wykonać wszystkie powyższe czynności. A oto dokument, który bardziej szczegółowo. Muszę przeprosić za dokument - jest to praca w toku i nie wszystkie sekcje zostały ukończone. Ale powinno to dostarczyć wszystkich informacji potrzebnych do wdrożenia czegokolwiek, od prostej wersji do pełnego dostępu na dwa okresy czasu.

TommCatt
źródło
1
Bardzo fajne punkty! Jednak nie do końca to rozumiem This means no flag or other indicator showing which is the current version and which are "history.", jeśli nie ma flagi ani wskaźnika, w jaki sposób odróżniamy obecną wersję od wersji historycznej? Zwłaszcza na podstawie trzeciego punktu, który sugerujesz, że powinien on znajdować się w tej samej tabeli.
GMsoF,
Prezentacja pokazuje przykładowy projekt, w tym zapytanie o odczytanie aktualnych i / lub przeszłych danych z tabel. Jeśli wygląda wystarczająco interesująco, aby przyjrzeć się głębiej, dokument zawiera o wiele więcej szczegółów.
TommCatt