Sourcing zdarzeń to droga, na którą powinieneś się przyjrzeć, i powinieneś rzucić okiem na to, co Greg Young ma na ten temat do powiedzenia.
http://goodenoughsoftware.net/
Zobacz także tę prezentację w jego bazie danych (Event Store). Możesz także znaleźć inne filmy.
http://oredev.org/2012/sessions/a-deep-look-into-the-event-store
Nie wybrałbym odpowiedzi „miękkie usuwanie”, chyba że potrzebujesz konkretnie możliwości wyszukiwania usuniętych elementów, ale wtedy nie powinieneś myśleć o nich jako usuniętych, ale raczej zarchiwizowanych. Myślę, że terminologia jest tutaj bardzo ważna.
Nie chciałbym też utrzymywać „tabeli wersji”. Wszystkie „tabele wersji”, jakie kiedykolwiek widziałem (w tym te, które próbuję obecnie oczyścić - 7 lat danych uszkodzonych z powodu błędów ... i nie ma sposobu, aby je odzyskać, mimo że mamy dane historyczne .. , ponieważ jest to tak samo uszkodzone), ostatecznie jest uszkodzony z powodu błędów w kodzie, a na koniec nadal tracisz dane, ponieważ nigdy nie możesz wrócić i odtworzyć danych, które zostały uszkodzone przez uszkodzenie.
W przypadku modelu pozyskiwania zdarzeń tak nie jest. Zawsze możesz odtworzyć dokładnie to, co zrobił użytkownik. Jest to bardzo ważna różnica między CRUD a Sourcingiem zdarzeń. Architektura Event Sourcing zapisuje zdarzenia w magazynie zdarzeń, a nie obiekty danych lub obiekty modelu domeny. Wydarzenie może z łatwością wpłynąć na wiele obiektów. Pomyśl o rozwiązaniu koszyka, w którym zamienisz każdy element w koszyku na rzeczywiste zamówienie. Jedno zdarzenie wpływa na wszystkie przedmioty przedmiotu, a także przedmioty koszyka, które są przekształcane w obiekt zamówienia.
Jeśli zachowałeś wersjonowaną kopię każdego wiersza w każdej tabeli w bazie danych, wyobraź sobie horror związany z koniecznością przewinięcia do określonego znacznika czasu, nie wspominając o niesamowitej ilości miejsca i narzutach związanych z utrzymaniem tej tabeli wersji.
Za pomocą Event Sourcing można łatwo przewijać do tyłu, odtwarzając zdarzenia do określonego momentu. Szybkie przewijanie do przodu można wprowadzić za pomocą migawek, ale to wszystko kwestia implementacji.
Ale prawdziwą zaletą, którą, jak sądzę, polubisz, ponieważ jesteś szczególnie zainteresowany nie utraceniem danych, jest to, że jeśli odkryjesz błąd w kodzie, który zapisuje te dane, nie musisz wracać i czyścić danych (co często jest niemożliwe, ponieważ dane prawie nigdy nie są kompletne). Zamiast tego po prostu napraw błąd i odtwórz wszystkie zdarzenia. Wtedy będziesz miał bazę danych z ładnymi poprawnymi danymi.
W przypadku debugowania, jak często prosiłeś użytkownika, aby powiedział ci, co zrobił ... dlaczego nie po prostu odtworzyć tego, co zrobił, a następnie przejść przez kod! Całkiem fajne, huh.
Mam nadzieję że to pomoże.
Is there a term for this? Basically only creating and reading data?
Pewnie, że jest: CR; P