这种标识变更的场景如何设计表结构

[复制链接]
查看11 | 回复3 | 2008-6-23 01:01:58 | 显示全部楼层 |阅读模式
目前在开发金融行业的上报系统,业务中有如此一个情况;比如:贷款帐户1原来在a银行,由于a银行拆并,可能贷款帐户1
变更到(移户到)b银行;
条件:需每天运行存储过程比较昨天与今天的数据,若相同,无标识变更,否则发生标识变更;
只能比对今天与昨天;不能用今天与昨天以前的数据进行比对;这样可能发生数据错误;
这样昨天上报了标识变更;今天又上报了标识变更;故只能用今天与昨天的数据比对

每天金融机构通过上报系统,上报贷款帐户1的信息到上报中心;补充一下,贷款帐户信息包括:
帐户表,此为一个单独的表(永远是最新的数据,银行拆并,帐户中的开户行列存储最新的开户行信息)
acct

acctnbr

bankorgnbr

yewudate


我大体想到如下的模型来实现这个功能:
分2个表:历史表与当前表
历史表:hist

recnbr记录编号,用于主键

acctnbr 帐户

etldate抽取时间,因为上报系统是从业务核心系统每天抽取数据(注:我们通过informatica加工的核心数据为基础)

bankorgnbr 原开户行
当前表:curr

recnbr

acctnbr--同上

etldate--同上

bankorgnbr--当前开户行
实现逻辑:每天运行存储过程,比对历史表与当前表,如果同一个acctnbr帐号的记录相同,表明没有发生标识变更(银行拆并),否则,把变更前后的旧新值插入到标识变更表
标识变更表:id_change

recnbr

yewudate

etldate

acctnbr

before_bankorgnbr

curr_bankorgnbr

因为标识变更,很少发生,所以通过两个表实现;这样虽然数据在某种程度上会重复存储,但代码编写简化;


想听听大家的建议,这样情况一般如何设计或编写代码,谢谢;
回复

使用道具 举报

千问 | 2008-6-23 01:01:58 | 显示全部楼层
原帖由 zhangfengh 于 2010-12-17 13:30 发表
出于什么目的考虑做两个表?一个表就足够用吧

用两个表(当前与历史表),只要比较历史表的最新记录与当前表
举例:
声明t前缀表示第几天

t1 首次运行存储过程 向历史表插入一条记录
t2 再次运行存储过程 向当前表插入一条记录,然后用当前表与历史表进行比较;

若二者相同,表示没有标识变更;否则发生标识变更;

然后把当前表的数据插入到历史表中
t3 同样运行存储过程 向当前表插入一条记录,然后处理逻辑同t2

为了符合条件,当天与仅与昨天比对,可能会在历史表中插入很多重复数据,
此处重复数据指:只是时间的列不同,其他列均相同;

我也想过用一个表实现;但没有想明白!
回复

使用道具 举报

千问 | 2008-6-23 01:01:58 | 显示全部楼层
你的“标识变更表”不就已经记录了历史吗?
你这里的数据应该有这些:
当前表;
标识变更表;
上报数据表。
你的程序将当前表和上报数据表进行比较。如果有变化,则更新当前表为最新状态,同时生成标识变更表数据。
回复

使用道具 举报

千问 | 2008-6-23 01:01:58 | 显示全部楼层
原帖由 newkid 于 2010-12-17 23:55 发表
你的“标识变更表”不就已经记录了历史吗?
你这里的数据应该有这些:
当前表;
标识变更表;
上报数据表。
你的程序将当前表和上报数据表进行比较。如果有变化,则更新当前表为最新状态,同时生成标识变更表数据。

这个方法,谢谢newkid大师;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行