2014-10-12 7 views
5

To tylko przypadkowa idea, o którą się zastanawiałem. Czy istnieją ORM lub bazy danych, które natywnie obsługują historię śledzenia? Wyobrażam sobie, że w każdym wierszu znajduje się złożony klucz podstawowy z identyfikatorem i wersją. Aktualizacja "doda" nowy wiersz z tym samym identyfikatorem i następnym dostępnym numerem wersji. Normalny wybór zwraca tylko najnowszą wersję unikalnie zidentyfikowanego wiersza, ale "SelectHistory" zwróci wszystkie wiersze. Usunięcie byłoby natywnie miękkie.ORM lub baza danych, która działa jak kontrola wersji i śledzi historię

Biorąc pod uwagę, że nie jest to nowy problem i że nie ma nic nowego pod słońcem, to uderzyło mnie, że istnieje duże prawdopodobieństwo, że ktoś już zaprojektował eleganckie rozwiązanie, które Abstracts twarde części tego z dala, i że mógł zrobić w warstwie bazy danych lub warstwie ORM.

Mam istniejącą aplikację zbudowaną na Entity Framework. Zastępuje metodę SaveChanges w DbContext, aby ustawić właściwości CreatedBy/CreatedDate/ModifiedBy/ModifiedDate dla każdej nowej/zmienionej jednostki. Klient zapytał ostatnio, ile pracy wymagałoby dodanie śledzenia całej historii. Podałem rozsądne szacunki na podstawie wcześniejszych doświadczeń z podobnymi systemami. Moje oszacowanie dotyczyło dodania dodatkowych elementów do modelu i logiki warstwy biznesowej w celu zapełnienia tych elementów. Klient zdecydował się nie wykonywać tej pracy, ale zastanawiałem się, czy istnieje lepszy sposób. Czy istnieje lepsze rozwiązanie z Entity Framework? Czy istnieją lepsze rozwiązania z innymi architekturami?

+0

Podjąłem inną kwestię w tej sprawie, aby sprawdzić wersję naszych baz danych wordpress. To, co zrobiłem, było nocnym zrzutem mysqladmin do wersjonowanego katalogu roboczego. Po zakończeniu zrzutu po prostu zatwierdziłbym zmiany. – B2K

Odpowiedz

0

To, co opisujesz, jest formą multi-version concurrency control. Zazwyczaj MVCC jest używany pod osłonami przez implementację bazy danych, aby uniknąć konieczności blokowania podczas transakcji tylko do odczytu, ale może być również wyraźny, jak sugerujesz. Omówiono różne opcje implementacji jawnego MVCC w this question. Jeśli także śledzisz datę utworzenia dla każdej wersji, masz wszystko, czego potrzebujesz do temporal database.