Я использую MySQL 5.1.36, и у меня есть база данных, используемая для системы поддержки через Интернет. В базе данных есть три таблицы, для которых я хочу отслеживать изменения:
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
Это действительно лучший способ? Каждый раз, когда в запись вносится даже малейшее изменение, вся запись вставляется в соответствующую таблицу истории. Это похоже на огромную трату пространства. Есть ли лучший способ сделать это?