数据库拉链算后记:不带删除的拉链算法

之前的拉链算法中
https://blog.csdn.net/m0_46177407/article/details/106290657
该算法流水表中标识需要删除的数据时,是通过修改表记录中帐号状态来表示数据删除的,实际上在向近源模型层加载时只发生了增、改两种状态。当在近源模型层搜索所有有效账户时候,被“删除”的记录的END_DATE也是3000-12-31,所以搜索到的有效记录中包含了标识为被删除的记录。故该种拉链算法被称为:带删除的拉链算法。

如果在技术缓冲层向近源模型层加载时,将流水表中增、改的记录和删除的记录分开向近源模型层加载。增、改还是与带删除拉链算法相同,删除的记录在近源模型层中闭链之后就不在插入开链的新纪录了。故当使用不带删除的拉链算时,查询所有有效数据,即END_DATE为3000-12-31时不会在选择帐号状态标记为删除的记录,只有正常帐号记录。故该种拉链算法称为:不带删除的拉链算法。

承接上回拉链算法的思路进行修改为不带删除的拉链算法:
新建表结构:
在这里插入图片描述
ACTYPE作为标记账户有效状态的标识。
在最后向模型层插入新数据时,改变如下:

--Step3:插入新增、修改的记录;

INSERT INTO SCOTT.ODBS08_ACT2213 
SELECT
     ACTNO 
	,OPNAME
	,PASSWD 
	,CASH 
	,OPDATE 
	,OPADDR
	,ACTYPE
    ,START_DT
    ,END_DT 
FROM SCOTT.T_ODBS08_ACT2213
WHERE DEL_IND='N' AND ACTYPE <> 'D';
commit;
--step3.1:修改目标表被删除记录标识
UPDATE SCOTT.ODBS08_ACT2213 SET ACTYPE='D' 
		WHERE ACTNO IN (SELECT ACTNO FROM T_ODBS08_ACT2213 WHERE ACTYPE='D');
COMMIT;

流水表经过增改和删除表后拉链到模型层中的效果如下:
在这里插入图片描述
在这里插入图片描述
所有标记为删除(‘D’)的数据都已闭链;
在这里插入图片描述
查询库中所有有效的账户信息,删除状态的记录不在查询结果中,不带删除的拉链算法运行成功。

补充:
①关于拉链算法中使用连接的选择。
当流水表中的数据为增量数据时,此时选用全连接和外连接均可实现查找增删改的效果。使用全连接时判断新数据的条件是流水表有而拉链表没有,即拉链表的ID为null的数据,拉链临时表中DEL_IND标记为’N’的记录。使用外连接时是以流水表作为主表,拉链表作为附表进行条件匹配,将匹配到的结果存入临时表中。
当流水表中的数据为全量数据时,在流水表与拉链表匹配时,必须用全连接或左连接union右连接的连接方式,单独用左链接或右连接都无法同时得到新增或全量表中彻底删除的记录(不只是标记为’D’删除状态而是整条记录都从流水表中删除的情况)。
②附:算法图解;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值