Nie będziesz w stanie wykonać dokładnej edycji za pomocą SQL. Potrzebujesz algorytmu takiego jak uniksowy diff
na plikach (co działa na poziomie wiersza). Na poziomie postaci algorytm byłby pewną odmianą odległość Levenshtein
. Jeśli diff
spełnia Twoje potrzeby, możesz go pobrać, napisać przechowywaną procedurę, aby go wywołać, a następnie użyć go w bazie danych. To byłoby dość drogie.
Część twojego pytania o utrzymanie różnych wersji jest znacznie łatwiejsza. Dodałbym dwie kolumny EffDate
i EndDate
na każdym rekordzie. Najnowszą wersję można pobrać, szukając EndDate is NULL
i znajdź wersję aktywną w danym momencie. Merge
jest ogólnie przydatne do utrzymywania takiej tabeli.