之前的拉鍊演算法中
該演算法流水表中標識需要刪除的資料時,是通過修改表記錄中帳號狀態來表示資料刪除的,實際上在向近源模型層載入時只發生了增、改兩種狀態。當在近源模型層搜尋所有有效賬戶時候,被「刪除」的記錄的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』刪除狀態而是整條記錄都從流水表中刪除的情況)。
②附:演算法**;
完。
資料庫拉鍊表算平均值
實際開發中我們會遇到下面這種需求,一張拉鍊表算客戶的日均餘額,看圖 下面是一張客戶餘額拉鍊表,求客戶a01的2018年06月01日至2019年05月31日的日均餘額。table a custmoerid amtstart dt end dt a011000 2018 03 01 2018 05 24...
如何刪除資料庫的資料
方法一 delete form 表名 方法二 truncate table 在功能上與不帶 where 子句的 delete 語句相同 二者均刪除表中的全部行。但 truncate table 比 delete 速度快,且使用的系統和事務日誌資源少。delete 語句每次刪除一行,並在事務日誌中為所...
資料庫表的刪除資料
select from class insert into class classname,classdesc select ssss sfsdfds1 union select ssss sfsdfds2 union select ssss sfsdfds3 union select ssss s...