Мне нужна какая-то история контроля версий для моей базы данных sql.
Я бы хотел, чтобы эта таблица продолжала обновляться с записью о том, кто, удалил что и т.д., когда.
Я подключаюсь к MySQL с помощью Perl.
Подход 1: Создайте отдельную таблицу аудита и используйте triggers для заполнения информации.
Вот краткое руководство для MySQL (и Postrges): http://www.go4expert.com/forums/showthread.php?t=7252
Подход 2: заполнение информации аудита из вашего кода доступа к базе данных Perl. В идеале, в рамках одной и той же транзакции. Там нет существенной победы над первым подходом и многими минусами (вы не заметили изменений, внесенных в OUTSIDE вашего кода, для одного)
** Отказ от ответственности: Я столкнулся с такой ситуацией в прошлом, но на PHP. Понятия для PHP, но могут быть применены к perl с некоторой мыслью.
Я играл с идеей добавления триггеров в каждую таблицу AFTER INSERT
, AFTER UPDATE
, AFTER DELETE
совершить то же самое. Проблема с этим была:
CURRENT_USER
)В любом случае, по моей ситуации, я нашел, что лучший способ действий был на уровне приложения (а не на уровне БД):
Если все сделано правильно, любые действия, которые вы выполняете для обновления любой таблицы, будут отслеживаться. Мне пришлось добавить некоторые переопределения для определенных таблиц, чтобы не отслеживать (например, точка отслеживания вставок в таблице "track_table" ). Вот пример схемы отслеживания таблицы:
CREATE TABLE `track_table` (
`id` int(16) unsigned NOT NULL,
`userID` smallint(16) unsigned NOT NULL,
`tableName` varchar(255) NOT NULL DEFAULT '',
`tupleID` int(16) unsigned NOT NULL,
`date_insert` datetime NOT NULL,
`action` char(12) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `userID` (`userID`),
KEY `tableID` (`tableName`,`tupleID`,`date_insert`)
) ENGINE=InnoDB
USER
вместо CURRENT_USER
? dev.mysql.com/doc/refman/5.1/en/account-activity-auditing.html