Я использую MySQL 5.1.36 и имею базу данных, используемую для веб-справочной системы. База данных содержит три таблицы, я хотел бы отслеживать изменения для:Отслеживание изменений базы данных MySQL
CREATE TABLE IF NOT EXISTS `tickets` (
`TicketNum` int(11) unsigned NOT NULL,
`SubmittedFromIP` tinyblob,
`SubmittedFromDevice` varchar(255) DEFAULT NULL,
`EntryDate` datetime DEFAULT NULL,
`ClosedDate` datetime DEFAULT NULL,
`LastName` varchar(50) DEFAULT NULL,
`FirstName` varchar(50) DEFAULT NULL,
`Email` varchar(50) DEFAULT NULL,
`Location` varchar(4) DEFAULT NULL,
`InventoryNumber` varchar(50) DEFAULT NULL,
`DeviceName` varchar(50) DEFAULT NULL,
`Description` text,
`Notes` text,
`Agent_ID` smallint(5) unsigned NOT NULL DEFAULT '1',
`TotalHoursSpent` float NOT NULL DEFAULT '0',
`Status` smallint(5) unsigned NOT NULL DEFAULT '1',
`Priority` tinyint(4) NOT NULL DEFAULT '0',
`LastUpdatedByAgent_ID` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`TicketNum`),
KEY `ClosedDate` (`ClosedDate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `ticketsolutions` (
`Entry_ID` int(10) unsigned NOT NULL,
`TicketNum` mediumint(8) unsigned DEFAULT NULL,
`EntryDateTime` datetime DEFAULT NULL,
`HoursSpent` float DEFAULT NULL,
`Agent_ID` smallint(5) unsigned DEFAULT NULL,
`EntryText` text,
`LastUpdatedByAgent_ID` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`Entry_ID`),
KEY `TicketNum` (`TicketNum`),
KEY `EntryDateTime` (`EntryDateTime`),
KEY `HoursSpent` (`HoursSpent`),
KEY `Rating` (`Rating`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `tickettagsmap` (
`TicketNum` int(11) unsigned NOT NULL,
`Tag_ID` int(10) unsigned NOT NULL,
`AddedByAgent_ID` smallint(5) unsigned NOT NULL,
`DateTimeAdded` datetime NOT NULL,
PRIMARY KEY (`TicketNum`,`Tag_ID`),
KEY `Tag_ID` (`Tag_ID`),
KEY `fk_AgentID` (`AddedByAgent_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Основываясь на том, что я прочитал, лучший способ справиться с этим для создания дубликатов таблиц, только с двумя дополнительными полями в таблице:
ModifiedDateTime
Action
Действительно ли это лучший способ? Каждый раз, когда в запись записывается хоть малейшее изменение, вся запись вставляется в соответствующую таблицу истории. Похоже, огромная пустота пространства. Есть лучший способ сделать это?
** лучший способ ** в зависимости от ваших потребностей, что вы хотите знать о тех, изменения и для чего вы хотите. – Johan
Я хотел бы знать, когда _anything_ меняется с билетами. Например, если пользователь отправляет билет с плохим описанием проблемы, агент обновит описание, чтобы лучше описать проблему. Я все равно хотел бы посмотреть, что такое оригинальное описание. Я также хотел бы отслеживать, когда изменяется приоритет билета, когда теги добавляются в билет, когда статус билета меняется и т. Д. – Paul
Если вы хотите восстановить состояние, чтобы увидеть состояние до изменения, вам нужно будет сохранить полные данные, которые вы уже знаете, как это сделать. – Johan