Здравствуйте, дорогие форумчане!
Вопрос касается организации баз данных. Но поскольку вопрос является теоретическим, а реализовываться будет на VBA в Excel, я задаю его на этом форуме.
Я разрабатываю небольшую систему учёта документов для организации. Всё уже работает, но захотелось иметь возможность контроля изменений и реализации отката этих изменений.
Система работает на связке Excel-VBA + база данных Access, подключаемая через ADODB.
Работа системы организована следующим образом:
1. по нажатии кнопки на Ribbon выводится таблица с данными из базы;
2. двойным кликом на строке вызывается форма редактирования строки (Записи);
3. при нажатии на кнопку <Принять> на форме происходит фиксация изменений и обновление таблицы.
На данном этапе при любом изменении Записи, Запись переписывается в базе данных, замещая старые данные:
Код |
---|
Dim rs As New ADODB.Recordset
….
rs.Open ………..
If rs.RecordCount > 0 Then
rs.MoveFirst
rs.Update ……….
rs.UpdateBatch adAffectCurrent
End If
rs.Close |
Теперь хочу сделать так, чтобы при любом изменении Записи, она не переписывалась, а добавлялась новая Запись с тем же ключом, новым временем изменения (добавления) и пользователем, что внёс эти изменения. Пользователи всегда будут видеть только «последнее состояние записи».
Звучит красиво и несложно, но возникает одно большое «но»:
засорение базы многими копиями объекта и, как следствие, увеличение объёма базы
Напрашивается необходимость принять правило, что надо удалять дублирующиеся Записи со сроком давности более, чем ХХХХ. Для этого необходимо периодически сканировать таблицы в базе данных для поиска таких Записей. Если при программировании на «взрослых» языках программирования можно выделить отдельный процесс, занимающийся таким важным делом, то на VBA придётся встраивать сканирование в основной процесс, замедляя основные операции.
Прошу вас высказать своё мнение, подкинуть новую идею, дать совет по вариантам реализации и организации этого процесса.