mysql时点数据快照_数据库设计 – 数据库设计的时间点“快照”的数据?

我们通过创建单独的数据库表来创建单独的数据库表,其中包含我们想要快照的数据,但是非规范化,即每个记录都包含所有需要理解的数据,而不是引用可能存在或可能不再存在的id.它还为每行添加了一个日期.

然后,我们为特定的插入或更新生成了对所有受影响的表进行连接的触发器,并将其插入到快照表中.

这样一来,写一些将用户数据恢复到一个时间点的东西就是微不足道的.

如果你有一张桌子:

用户:

id, firstname, lastname, department_id

部:

id, name, departmenthead_id

您的用户表的快照可能如下所示:

user_id, user_firstname, user_lastname, department_id, department_name, deparmenthead_id, deparmenthead_firstname, departmenthead_lastname, snapshot_date

和一个查询

INSERT INTO usersnapshot

SELECT user.id AS user_id, user.firstname AS user_firstname, user.lastname AS user_lastname,

department.id AS department_id, department.name AS department_name

departmenthead.id AS departmenthead_id, departmenthead.firstname AS departmenthead_firstname, departmenthead.lastname AS departmenthead_lastname,

GETDATE() AS snapshot_date

FROM user

INNER JOIN department ON user.department_id = department.id

INNER JOIN user departmenthead ON department.departmenthead_id = departmenthead.id

这可以确保快照中的每一行在时间上都是正确的,即使部门或部门主管同时发生变化.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值