Как регистрировать данные, измененные в таблицах SQL Server.Какой подход лучше - PullRequest
2 голосов
/ 01 сентября 2011

Просто хотел узнать об изменении данных регистрации.

Я видел способы отслеживания изменения данных (DML).

  1. Использование триггеров
  2. Сохранение столбцов в одной и той же таблице для добавленной даты, добавленной, измененной даты, измененной.

Использование подхода (1),Я могу написать триггеры для вставки / удаления / обновления в каждой таблице для регистрации изменений и, следовательно, могу применить отношение внешнего ключа и другие ограничения, такие как ограничения уникального ключа, для всех таблиц согласно требованию.

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

Есть ли какие-либо проблемы проектирования в таблицах базы данных.Каков рекомендуемый способ для подхода (2) регистрировать данные.

Какой подход лучше.

Также я узнал от некоторых из моих коллег, что триггеры не запускают массовую вставку.запросы это правда?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Решение, которое мне больше всего нравится для этого, состоит в том, чтобы потребовать (используя функции безопасности, если это возможно) весь доступ к данным приложения (или, по крайней мере, все операции CRUD), чтобы пройти через хранимые процедуры, и чтобы SP могли управлять отслеживанием и аудитом изменений.

Проблема с триггерами в том, что они плохо масштабируются;они могут налагать существенные потери производительности, превращая то, что может быть пакетными вставками или обновлениями, во многие однострочные операции.

Что касается сохранения изменений в строке или в другой таблице, я предпочитаю использовать другую таблицу,Таким образом, у меня также может быть история реальных изменений, когда это необходимо, а не просто кто и когда.Ограничение исходной таблицы также может помочь с производительностью запросов / чтения.

Вы также можете применить разбиение к таблицам аудита, что позволит легко их исключать / отбрасывать, когда придет время.

1 голос
/ 03 декабря 2011

Вам не хватает большого: Изменить захват данных .В Sql Server Enterprise Edition эта функция уже встроена.

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