Как лучше всего отслеживать, когда таблицы обновляются в SQL? - PullRequest
3 голосов
/ 01 февраля 2010

Раньше я просто добавлял поле к каждой таблице и обновлял его с помощью GETDATE () при каждом обновлении / вставке. Проблема в том, что теперь я должен следить за удалением тоже. Я думал о том, чтобы просто иметь таблицу, которую я буду обновлять, когда что-нибудь изменится, и добавить триггер для всех других таблиц. Идеи ??? Спасибо!

Ответы [ 7 ]

4 голосов
/ 01 февраля 2010

Если у вас есть таблица истории (таблица с такими же столбцами, что и исходная таблица, плюс столбец идентификатора с автоматическим приращением), вы можете отслеживать все изменения в исходной таблице. Вы можете отслеживать вставки, удаления и каждое изменение. Используйте триггеры для вставки, обновления и удаления, чтобы поместить строку в таблицу истории. Если вам не нужны все эти опции, используйте те, которые вам нужны.

Если вы решите использовать флаг IsDeleted в исходной таблице, это усложняет каждый запрос и оставляет вашу активную таблицу с большим количеством ненужных строк. Но это может работать, в зависимости от ваших потребностей.

1 голос
/ 01 февраля 2010

Если вы используете SQL Server 2008, вы можете воспользоваться новыми функциями аудита .

1 голос
/ 01 февраля 2010

Я видел таблицы, разработанные с битовым полем как IsDeleted, и значение по умолчанию, конечно, установлено в false. При удалении элемента это значение устанавливается равным true. Все запросы должны были бы принять это во внимание:

SELECT blah FROM myTable WHERE IsDeleted=0

Таким образом, если вы «случайно» удалили строку, вы сможете вернуть ее обратно. Вы также можете очищать записи, скажем, еженедельно / ежемесячно / ежегодно.

Это просто идея для вас.

0 голосов
/ 12 апреля 2011

Если вы используете SQL 2008, вы можете использовать CDC (Change Data Capture) для отслеживания.

Ссылка ниже дает полную информацию. Если вы включаете CDC для определенной таблицы, то автоматически удаляются данные, которые будут собраны.

http://www.simple -talk.com / SQL / учиться-SQL-сервер / введение к изменению-данных Capture-% 28cdc% 29-в-SQL-сервера 2008 /

0 голосов
/ 01 февраля 2010

Все действия (вставка - обновление - удаление) должны быть зарегистрированы в журналируемой таблице. Я всегда регистрирую действие, метку времени и пользователя, который вызвал действие. Добавление столбца Isdelete в исходную таблицу является плохой практикой.

0 голосов
/ 01 февраля 2010

Я также видел дубликат таблицы со стандартным префиксом, добавленным к имени. Все удаленные строки перемещаются в дубликат таблицы. Это устраняет накладные расходы на хранение, но игнорирует строки в исходной таблице.

0 голосов
/ 01 февраля 2010

Пометить записи как удаленные = 1 и не удалять их. Сделайте триггер при удалении вместо обновления ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...