Mysql 跟踪数据库表更改
我正在尝试实现一种方法来跟踪名为Mysql 跟踪数据库表更改,mysql,sql,database-design,Mysql,Sql,Database Design,我正在尝试实现一种方法来跟踪名为user的表和另一个名为report\u to的表的更改,下面是它们的定义: CREATE TABLE `user` ( `agent_eid` int(11) NOT NULL, `agent_id` int(11) DEFAULT NULL, `agent_pipkin_id` int(11) DEFAULT NULL, `first_name` varchar(45) NOT NULL, `last_name` va
user
的表和另一个名为report\u to
的表的更改,下面是它们的定义:
CREATE TABLE `user`
(
`agent_eid` int(11) NOT NULL,
`agent_id` int(11) DEFAULT NULL,
`agent_pipkin_id` int(11) DEFAULT NULL,
`first_name` varchar(45) NOT NULL,
`last_name` varchar(45) NOT NULL,
`team_id` int(11) NOT NULL,
`hire_date` date NOT NULL,
`active` bit(1) NOT NULL,
`agent_id_req` bit(1) NOT NULL,
`agent_eid_req` bit(1) NOT NULL,
`agent_pipkin_req` bit(1) NOT NULL,
PRIMARY KEY (`agent_eid`),
UNIQUE KEY `agent_eid_UNIQUE` (`agent_eid`),
UNIQUE KEY `agent_id_UNIQUE` (`agent_id`),
UNIQUE KEY `agent_pipkin_id_UNIQUE` (`agent_pipkin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `report_to`
(
`agent_eid` int(11) NOT NULL,
`report_to_eid` int(11) NOT NULL,
PRIMARY KEY (`agent_eid`),
UNIQUE KEY `agent_eid_UNIQUE` (`agent_eid`),
KEY `report_to_report_fk_idx` (`report_to_eid`),
CONSTRAINT `report_to_agent_fk` FOREIGN KEY (`agent_eid`) REFERENCES `user` (`agent_eid`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `report_to_report_fk` FOREIGN KEY (`report_to_eid`) REFERENCES `user` (`agent_eid`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
需要跟踪的更改是用户.team\u id
,用户.active
和报告对象.报告对象eid
。我目前实现的是一个表,它是通过user
上的更新触发器填充的,用于跟踪团队的变化。该表定义如下:
CREATE TABLE `user_team_changes`
(
`agent_id` int(11) NOT NULL,
`date_changed` date NOT NULL,
`old_team_id` int(11) NOT NULL,
`begin_date` date NOT NULL,
PRIMARY KEY (`agent_id`,`date_changed`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
这只适用于跟踪团队更改。我能够使用联接和联合来填充历史视图,该视图跟踪各个用户随时间而发生的变化。当我尝试对其他两种更改类型实施跟踪时,复杂性问题就出现了
我曾考虑过创建类似于跟踪团队更改的表的附加表,但我担心由于需要连接而导致的性能下降
我考虑过的另一种方法是创建一个类似于视图的表,该视图详细说明了当前用户状态(它将4个表中所有必要的用户数据连接在一起),然后在更新时插入一条记录,并添加一个有效的截止日期字段。我关心的是这会占用多少空间
我们将大量使用用户更改历史记录,因为我们几乎每天都会使用它运行YTD、MTD、PMTD和时间间隔报告
在我考虑的两个选项中,哪一个最适合我的情况?您介绍的选项:
日期
,日期时间
,以及时间戳
字段非空
。(NULL
值可能会打乱索引和搜索)
希望这能有所帮助。当您的系统运行一年后,您的表中大约有多少行?我估计在
user
和report\u中有apx 2000-2500,总共大约有7000个更改。