mysql历史表_MySQL历史表设计和查询

TL; DR:这个设计是否正确,我应该如何查询?

我们假设我们有city和地址的历史记录表,其设计如下:

CREATE TABLE city_history (

id BIGINT UNSIGNED NOT NULL PRIMARY KEY,

name VARCHAR(128) NOT NULL,

history_at DATETIME NOT NULL,

obj_id INT UNSIGNED NOT NULL

);

CREATE TABLE address_history (

id BIGINT UNSIGNED NOT NULL PRIMARY KEY,

city_id INT NULL,

building_no VARCHAR(10) NULL,

history_at DATETIME NOT NULL,

obj_id INT UNSIGNED NOT NULL

);

原始表几乎相同,除了history_id和obj_id(city:id,name; address:id,city_id,building_no )。 city和地址(city_id)之间也存在外键关系。

历史记录表会在原始条目(创建,更新,删除)的每次更改时填充,并在给定时间显示条目的确切状态。

obj_id保存原始对象的id - 没有外键,因为原始条目可以删除,历史记录条目也不能。 history_at是创建历史记录条目的时间。

为每个表单独创建历史记录条目 - 更改城市名称会创建city_history条目,但不会创建address_history条目。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值