Oracle新手入门数据分析师必知——拉链表(EMP表样例)
一、什么是拉链表?
答:所谓拉链表就是反应一条数据历史变化过程的表。拉链表的程序中涉及两张表,一张是用于取数据的源头表(源表),另一张就是拉链表(这张表里的数据体现了一个数据变化过程)。
二、拉链表的作用、应用是什么?
查看某一个时间点或者时间段的历史快照信息,比如:查看某一个订单在历史某一个时间点的状态,查看某一个用户在过去某一段时间内,更新过几次等等。
三、拉链表的优点、好处?
既能满足反应数据的历史状态,又可以最大程度的节省存储。
四、拉链表的实现过程?
1.1 造一个数据来源表,
1.2 造一个拉链表(相当于目标表)
**2 ** 来源表的数据同步到拉链表
** 2.1 ** 当来源表的数据发生了变化(新增或者修改)
** 2.2 ** 需要再次将发生了变化 (新增或者修改) 的数据同步到拉链表,此时同一个业务主键会有2条或者多条数据(比如7369的员工发生了变化,需要将7369的数据同步到拉链表中,拉链表里就会有2条 7369 的数据)
**3–**修改拉链表中重复数据的失效时间(将原来那条数据的失效时间修改为当前时间)
五、上实操,以EMP表为例
实现拉链表的过程
---1.1--造源表
CREATE TABLE EMP_LALIAN_SOURCE
AS
SELECT T.*
FROM EMP T;
SELECT * FROM EMP_LALIAN_SOURCE; --- 源表
--1.2--创建一张拉链表
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 =