古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。这篇文章主要讲述数据仓库的数据模型(拉链表-能追踪历史信息的实现方案)实践杂谈相关的知识,希望能为你提供帮助。
为了记录信息的变更情况,不仅保留最新状态,也要求历史信息可用时,适合使用拉链表。
基本构成1、拉链表 ZipData(zip_data,mtlStore)
【分区分表存储:总表视图mtlStoreTtl、运行表mtlStore、历史表(失效时间非空)mtlStore2022、mtlStore2023……】
//target见【形态表】
String targetId;
//mtlId;
//目标ID【10G02100023A】
String targetUnicode;
//mtlUnicode;
//目标唯一码【如:资产编号】
String targetName;
//mtlName;
//目标名【X-RAY检测仪】
String targetCode;
//mtlCode;
//目标码【10G02100023】Integer storeNum;
//数量Date zipStart;
//生效时间
Date zipEnd;
//失效时间
Date zipDate;
//非持久化,查询用,代表时间点
2、操作详情 ZipAction(zip_action,mtlIom)【凭证:mtlIomOrder】
【分区分表存储:总表视图mtlIom、操作时间分表 mtlIom2022、mtlIom2023……】
String iomOrderId;
//凭证ID
String iomCode;
//凭证号
Integer iomSort;
//凭证序号Date actionDate;
//操作时间 iomDate
Date actionType;
//操作类型 iomType【】
String targetId;
//目标ID mtlId
Integer actionNum;
//操作数量Integer inNum;
//操作i数量【需带上 元数据 】
Integer outNum;
//操作o数量
Integer actiontNum;
//操作t数量(理论数)
Integer actioncNum;
//操作c数量(盘点数)
Integer actiondNum;
//操作d数量(差异数)String inWhlId;
//入位 u:userId(人员位)
String inWhlName;
//入位名 u:userName(人员名)
String outWhlId;
//出位
String outWhlIdName;
//出位
String checkWhlId;
//盘点位ID
String checkWhlName;
//盘点位名
3、冻结记录(期初期末)ZipFreeze:(zip_freeze,mtlFreeze)
【分区分表存储:总表视图mtlFreeze、归集时间分表 mtlFreeze2022、mtlFreeze2023……】
Date freezeDate; //归集时间
String targetId; //目标ID
String targetName; //目标名
Integer storeNum; //数量
String freezeId;
//冻结ID
String freezeName;
//冻结名String whlId;
//位ID u:userId(人员位)
String whlName;
//位名 u:userName(人员名)
4、期间操作表(阶段时间操作统计)ZipCount:(zip_count,mtlCount)
【分区分表存储:总表视图mtlCount、结束时间分表 mtlCount2022、mtlCount2023……】
Date startDate;
//起始时间
Date endDate;
//结束时间
Integer startNum;
//期初数量
Integer endNum;
//期末数量Integer inum;
//入数
Integer onum;
//出数
Integer dnum;
//差异数Integer inumBuy;
//购
Integer inumRec;
//回收
Integer inumMove;
//移入
Integer inumAdjustz;
//调整增Integer onumSale;
//售
Integer onumSc;
//生产
Integer onumMove;
//移出
Integer onumShip;
//出货
Integer onumAdjustj;
//调整减
5、元数据信息.ZipMeta【zip_meta,mtlPrice】
Float priceTax;
String taxType;
Float taxRate;
Float price;
Float tax;
【数据仓库的数据模型(拉链表-能追踪历史信息的实现方案)实践杂谈】6、元数据追踪表【最初引入的数据(如价格)的追踪】ZipTrack:(zip_track,mtlConsume)【与形态表息息相关】
String mtlUnicode;
//
String mtlId;
//
String mtlName;
//
String whlId;
//u:userId
String whlName;
//u:userNameString inCode;
//入码
String inName;
//入名
String inPrice;
//入价String outCode;
//metaId;
//元数据ID
metaName;
//元数据
price;
//
7、统计分析(略) 利用拉链表、元数据追踪进行统计 // 元数据原理
String leftNum;
/** 逻辑演示 MrpConsumeDetailServiceUtils
idididinNumoutNumstoreNumcalculateDateremarks
1YSM1100 01002020-05-31待消耗1YSM1808002020-06-01已消耗
2YSM1200202020-06-01待消耗1YSM1808002020-06-01已消耗
2YSM1202002020-06-02已消耗
*/
更新数据方法
/**AcSettleDao_Utils
* TODO 恢复方案一(√):(利用 财务结算标记 acSettleFlag:Y已结算,N未结算)(finishFlag未生效-U、已生效-N、已完成-Y、已作废-F)
*
* 【UpdateDate >
lastAcSettleDate】
*
* MrpInDetail(结算)
* 关闭:finishFlag == Y(已完成)F、(已作废)
* 其余不关闭。finishFlag-U(未生效)、N(已生效未完成)【outedNumber、leftNumber、outDesc等信息有用】
*
* MrpInDetail(恢复)(仅对N的进行恢复:His有的则从His恢复,新创建的归0)
* createDate <
= lastAcSettleDate:outedNumber等信息归0
* createDate >
lastAcSettleDate:从His里恢复(其实也是归0)。
*
*
* MrpMoveDetail(结算)
* 关闭:finishFlag == Y(已完成)F、(已作废)
* 其余不关闭。finishFlag-U(未生效)、N(已生效未完成)【outedNumber、leftNumber、outDesc\\inDetailDone、inDesc等信息有用】
*
* MrpMoveDetail(恢复)(仅对N的进行恢复:His有的则从His恢复,新创建的归0)
* createDate <
= lastAcSettleDate:outedNumber\\inDetailDone、inDesc等信息归0
* createDate >
lastAcSettleDate:从His里恢复(其实也是归0)。
*
*
* MrpOutDetail(结算)
* 关闭:finishFlag == Y(已完成)F、(已作废)
* 其余不关闭。finishFlag-U(未生效)、N(已生效未完成)【inDetailDone、inDesc等信息有用,其实是归0】
*
* MrpOutDetail(恢复)(仅对N的进行恢复:His有的则从His恢复,新创建的归0)
* createDate <
= lastAcSettleDate:inDetailDone、inDesc等信息归0
* createDate >
lastAcSettleDate:从His里恢复(其实也是归0)。
*
*
* MrpStore(结算)
* 关闭:zipEnd存在
* 其余不关闭。zipEnd==null
*
* MrpStore(恢复)(仅对N的进行恢复:His有的则从His恢复,新创建物理删除)
* createDate <
= lastAcSettleDate:inDetailDone、inDesc等信息归0
* createDate >
lastAcSettleDate:物理删除。
*
*
* MrpConsumeDetail(结算)
* 关闭:storeNum == 0、inNum==outNum、remarks=="已消耗"
* 其余不关闭。storeNum == inNum、outNum=0、remarks=="待消耗"
*
* MrpConsumeDetail(恢复)(仅对N的进行恢复:His有的则从His恢复,新创建物理删除)
* createDate <
= lastAcSettleDate:inDetailDone、inDesc等信息归0
* createDate >
lastAcSettleDate:物理删除。
*
*
* 结算具体操作:【UpdateDate >
lastAcSettleDate】
* 1、ALL(如:MrpInDetail):对原来为N(或更新时间在上次结算时间之后的)(更新状态 acSettleFlag:Y,N)。
* 2、HIS(如:MrpInDetailHis):删掉原来所有N。acSettleFlag:N。(理由:原有的Y不会再变更、N可能会变更)
* 3、HIS(如:MrpInDetailHis):追加新更新为Y和N。acSettleFlag:Y或N(理由:相当于完全镜像拷贝当前状态)
*
*
* 恢复具体操作:【UpdateDate >
lastAcSettleDate】
* 1、MrpInDetail、MrpOutDetail、MrpMoveDetail(仅对N的进行恢复:His有的则从His恢复,新创建的归0)
* createDate >
lastAcSettleDate:inDetailDone、inDesc等信息归0
* createDate <
= lastAcSettleDate:从His里恢复(【outedNumber、leftNumber、outDesc\\inDetailDone、inDesc等信息归0】)。
*
* 2、MrpStore、MrpConsumeDetail(仅对N的进行恢复:His有的则从His恢复,新创建物理删除)
* createDate <
= lastAcSettleDate:inDetailDone、inDesc等信息归0
* createDate >
lastAcSettleDate:物理删除
*
*/
推荐阅读
- KMS服务器地址
- Centos7环境ELK搭建
- 北亚数据恢复IBM DS系列存储服务器硬盘故障导致映射出错,业务下线的数据恢复案例
- WGCLOUD和ZABBIX两个运维软件如何选型
- Hadoop-3.1.3高可用集群部署
- linux基础用户权限管理
- 13个免费数据恢复软件
- yum安装mysql5.7报密钥已过期的解决方案
- Docker-compose快速编排