致力做一个首先想的是怎么帮助别人的人 点赞再看,帮我个忙
<>前言

刚工作的时候,有个厉害的同学比我先去公司实习,回到学校就跟我说拉链表的有关知识,而且后来跳槽面试时也被问到拉链表,所以想写一下拉链表,希望能帮到万一面试也被问到拉链表的同学。

<>为什么要用拉链表

比如银行评价一个客户的等级,是根据客户的资产多少来评定的,而且根据国家经济情况变化而需要调整的。

所以你需要一个能够反映等级评分历史变化的表:

等级代号等级名称资产范围生效时间失效时间
A低价值客户0~50002000/1/12015/2/1
A低价值客户0~100002015/2/22099/12/31
B潜力客户10000~500002000/1/12099/12/31

表中数据反应了银行评定客户等级的标准,等级A(低价值客户),在2000/1/1日至2015/2/1日之间,资产低于5000的客户为级别A,在2015年2月2日将A等级的资产范围调整为低于10000,像这种可以反应历史变化的数据表就是拉链表了。

<>如何使用拉链表

可以注意到,拉链表会有两个时间字段,生效时间和失效时间,表示当前记录的有效期,而且同一等级的生效时间和失效时间是首尾相连的,也就是说同一等级在确定的时间点可以找到确定的资产范围,这样也就达到了历史可查的效果。

<>如何更新拉链表

比如上面表格,一开始表中只有一条等级A的数据

等级代号等级名称资产范围生效时间失效时间
A低价值客户0~50002000/1/12099/12/31
在2015年2月2日要更新等级A的资产范围为0~10000,
第一步:匹配表中是否有等级代号等于A的记录,

* 如果没有,则直接插入生效时间为2015/2/2日,失效时间为2099/12/31的一条记录即可;
*
如果匹配到有,则将等级代号等于A并且失效时间为2099/12/31的记录闭链,即将该条记录的失效时间更新为2015/2/1日,最后插入生效时间为2015/2/2日,失效时间为2099/12/31的一条记录。
等级代号等级名称资产范围生效时间失效时间
A低价值客户0~50002000/1/12015/2/1
A低价值客户0~100002015/2/22099/12/31
<>附上更新代码
v_count number; select count(1) into v_count from t_grades where grade_code =
'A' ; if v_count > 0 then update t_grades set end_date = '2015/2/1' where
grade_code= 'A' and end_date = '2099/12/31'; commit; end if; insert into
t_gradesvalues('A','低价值客户','0~10000','2015/2/2','2099/12/31'); commit;

技术
©2019-2020 Toolsou All rights reserved,
[数据结构]八大排序算法(C语言)总结G1垃圾收集器面试题Android中使用微信H5支付时支付结果刷新问题32-jdbc工具类大学里要参加竞赛吗?都有哪些竞赛可以参加?震惊!!C++居然可以发出声音!C语言之链表入门(超详解)Java实现一个疫情人数管理系统如何用python实现斐波那契数列的前100个MyBatis循环Map(高级用法)