-拉链表
--就是反应一条数据历史变化过程的表,
拉链表程序涉及到的表
1 源表--取数据的源头 2 拉链表 --这张表里的数据体现了一个数据变化过程
实现拉链表的过程
1--造一个数据来源表,一个拉链表(相当于目标表)
2--来源表的数据同步到拉链表
2.1 当来源表的数据发生了变化(新增或者修改)
2.2 需要再次将发生了变化 (新增或者修改) 的数据同步到拉链表,此时同一个业务主键会有2条或者多条数据(比如7369的员工发生了变化,需要
将7369的数据同步到拉链表中,拉链表里就会有2条 7369 的数据)
3--修改拉链表中重复数据的失效时间(将原来那条数据的失效时间修改为当前时间)
---造源表
CREATE TABLE EMP_LALIAN_SOURCE
AS
SELECT T.*
FROM EMP T;
SELECT * FROM EMP_LALIAN_SOURCE; --- 源表
--创建一张拉链表
create table EMP_LALIAN_TAG
(
EMPNO NUMBER(4)
,ENAME VARCHAR2(10)
,JOB VARCHAR2(9)
,MGR NUMBER(4)
,HIREDATE DATE
,SAL NUMBER(7,2)
,COMM NUMBER(7,2)
,DEPTNO NUMBER(2)
,START_DATE DATE
,END_DATE DATE
,ACTIVE_FLAG VARCHAR2(10)
);
-----2--来源表的数据同步到拉链表, --初始化基础数据
INSERT INTO EMP_LALIAN_TAG
SELECT T.EMPNO,
T.ENAME,
T.JOB,
T.MGR,
T.HIREDATE,
T.SAL,
T.COMM,
T.DEPTNO
,T.HIREDATE---入职日期这一天,就是这条数据的开始生效时间
,TO_DATE('47121231','YYYYMMDD')
,'Y'
FROM EMP_LALIAN_SOURCE T;
COMMIT;
SELECT * FROM EMP_LALIAN_TAG; --查看初始化基础数据
---2.1 当来源表的数据发生了变化
UPDATE EMP_LALIAN_SOURCE T SET DEPTNO = 40 WHERE DEPTNO = 20;
UPDATE EMP_LALIAN_SOURCE T SET SAL = 2850 WHERE EMPNO= 7782;
INSERT INTO EMP_LALIAN_SOURCE VALUES(123,'AAA','CLERK',7698,TRUNC(SYSDATE,'DD'),2380,100,20);
COMMIT;
SELECT * FROM EMP_LALIAN_SOURCE;
--2.3 需要再次将发生了变化的数据同步到拉链表,此时同一个业务主键会有2条数据
---2.3 ---新增,或者有改变的最新数据写入到 拉链表 ---开链
INSERT INTO EMP_LALIAN_TAG
SELECT T.EMPNO,
T.ENAME,
T.JOB,
T.MGR,