| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > изменение данных |
| Автор: UnixBeginner 13.2.2006, 13:13 | ||
есть таблица с данными:
первичного ключа нет. Выбираю эти данные по полю id и вывожу в таблице. Теперь необходимо проследить: изменялись ли данные, были ли удалены какие-либо строки. Как это можно реализовать если не обращаться к БД сразу после одного из этих действий (удаление, изменение, вставка)? Просто предположительный алгоритм, без привязки к языку. Правда есть предположение: ввести еще одно поле в программе - показатель - были данные изменени, ... и потом его проверять. Что посоветуете? |
| Автор: UnixBeginner 13.2.2006, 13:34 |
| просто изменения происходят в программе, а не в БД. Т.е. программа выбрала данные и все, затем пользователь работает уже с локальной копией, редактирует, ... А вносить изменения в БД необходимо только после того, как он нажал на кнопку "Save". Вроде триггеры тут не помогут. |
| Автор: Akina 13.2.2006, 13:39 |
| распрекрасно помогут... после редактирования, когда начинается сохранение, первым шагом будет повторный запрос и проверка, что данные, которые подлежат изменению в соответствии с воодом оператора, не подверглись изменению на сервере другим оператором с другого рабочего места, в ином случае следует сообщить о коллизии изменений. Задача же триггера - просто зафиксировать факт изменения данных: какие данные, как, когда и кем изменены. Что делать с этой информацией - это уже совсем другой вопрос. |
| Автор: Bose 13.2.2006, 13:41 |
| триггеры помогут отследить разницу между тем, что было в базе до того, как пользователь нажал Save, и что там оказалось после того... если тебя интересует, именно процесс изменений данных на компьютере пользователя, то... это наверное ручками придётся обрабатывать... или триггерами в локальной базе данных |
| Автор: UnixBeginner 13.2.2006, 20:21 |
| ладно, видать нужно почитать по больше по БД, ьриггеры и другие примочки. Я пока в этом не особо разбирался, просто создавал таблицы и связи, а вот с тавими вопросами не сталкивался |
| Автор: Akina 14.2.2006, 10:23 |
| Есть другой подход. База данных дополняется полями TimeStamp As DateTime и Valid As Boolean. Поля НЕ РЕДАКТИРУЮТСЯ и НЕ УДАЛЯЮТСЯ. Любое действие по изменению - это установка Valid в False и создание новой записи с обновленным контентом. Удаление - просто установка Valid в False. Получается и журнал (лог атомов транзакций), и база в одном файле. Очень хорошо подходит для БД с низким (менее 5 в сутки) процентом обновления. |
| Автор: batigoal 14.2.2006, 12:50 |
| По идее, если не нужно вести полную историю изменений, можно ограничиться только последними n версиями. Тогда хотя бы таблицу не так разнесет. |
| Автор: SergeBS 14.2.2006, 12:52 |
| UnixBeginner Почитай Глеба Уфимцева: Сервис многократной отмены 'SQL-UNDO 2' в многопользовательской системе, построенной на движке MSSQL-server 7.0 http://www.gvu.newmail.ru/sql_undo_2.htm Мне очень понравилось. В принципе перешивается и для других движков. |