需求
医院、供货商、监管单位通过交易明细查询功能,查询出指定时间段内历史 交易清单。
监管单位,查询目的是为了监督。
医院、供货商查询目的,查询与自己相关交易信息。
1.2 分析
1.2.1 多表查询
主查询表:yycgdmx(采购单明细表)
关联查询表: useryy(内链接)、yycgd(内链接)、usergys(内链接)、ypxx(内链接)、入库信息表(【因为入库的采购单信息少于采购单表信息所以数据不完整,(并不是所有的采购单都入库了)所以使用】外链接)、退货信息(外链接)、结算 信息(外链接)
select
yycgdmx.*,yycgdrk.rkl,yycgdrk.rkje,yythdmx.thl,yythdmx.thje,yyjsdmx.jsl,yyjsdmx.jsje
from (
select
useryy.mc useryymc,yycgd.bm yycgdbm,yycgd.id yycgdid,usergys.mc usergysmc,yycgdmx.ypxxid,ypxx.*,yycgdmx.cgl,yycgdmx.cgje
from yycgdmx2014 yycgdmx,yycgd2014 yycgd,useryy,usergys,ypxx
where yycgdmx.yycgdid = yycgd.id
and yycgd.useryyid = useryy.id
and yycgdmx.usergysid = usergys.id
and yycgdmx.ypxxid = ypxx.id
)yycgdmx
--外链接入库信息
left join yycgdrk2014 yycgdrk on yycgdrk.yycgdid = yycgdmx.yycgdid and yycgdrk.ypxxid = yycgdmx.ypxxid
--外链接退货信息
left join yythdmx2014 yythdmx on yythdmx.yycgdid = yycgdmx.yycgdid and yythdmx.ypxxid = yycgdmx.ypxxid
--外链接结算信息
left join yyjsdmx2014 yyjsdmx on yyjsdmx.yycgdid = yycgdmx.yycgdid and yyjsdmx.ypxxid = yycgdmx.ypxxid
分析数据量:
采购明细表:上千万
入库信息:上千万
退货信息: 少
结算信息:上千万
三张大数据量的表关联查询,如果作统计,在三张表关联的基础上实现,速度慢,。
设想:如果将四张表的数据全部放在一张表,单表查询速度提高很大。
1.2.2 数据聚合意义
数据聚合的意义:
案例:
统计网站页面的访问量。
统计每一年每一个页面访问量。
实现方法:
数据采集:
完成原始数据(统计的来源数据)采集。
当用户点击页面时,需要记录用户点击信息(用户客户端ip、访问时间、访问页面的地址)
用户客户端ip:统计出用户来源于哪个地区
访问时间:统计出网站访问时段(比如哪些时间段访问量大)
访问页面的地址:统计出用户的喜好,哪些页面用户访问多。
如果对原始数据直接进行统计,速度很慢,因为原始数据量很大,所以说要对原始进行数据分析,分析后进行数据聚合。
数据聚合结果:
按分钟聚合:
将原始数据按分钟聚合后存储到单独的分钟聚合表:
聚合时执行一次小范围的统计。
时间(年、月、日、时、分)、XXX页面、访问量(这一分钟的访问总量)
时间(年、月、日、时、分)、XXX页面、访问量(这一分钟的访问总量)
按小时聚合:
将原始数据按小时聚合后存储到单独的小时聚合表:
从分钟聚合表中执行一次小范围的统计。
时间(年、月、日、时)、XXX页面、访问量(这一小时的访问总量)
时间(年、月、日、时)、XXX页面、访问量(这一小时的访问总量)
….
按天聚合:
近年聚合:
通常情况下,单独开发统计系统,后台开始定时任务进行专门数据采集、数据分析、数据聚合。
1.2.3 本系统数据聚合方法
目标:将采购单明细信息、入库信息、退货信息、结算 信息聚合到一张表中,提高查询统计的速度。
设想:在采购单明细表中添加入库信息、退货信息。。。。字段?
这种方法不合理,将统计分析业务功能和采购业务功能使用一张表存储信息,耦合性较强,可扩展性较差。
采用方案:
新创建一张交易明细表YYBUSINESS+4位年份:
记录采购明细、入 库信息、退货信息、结算 信息。
唯一约束:采购单id和药品id
聚合方法如下:
1.2.4 使用触发器进行数据同步
如果原始表和目标表在一个数据库中,建议使用触发器进行数据同步:
原始表插入时向目标表插入
原始表修改时更新目标表记录
原始表删除时删除目标表记录
注意:如果触发器仅仅数据同步,建议使用触发器,如果触发器中有业务逻辑,不建议使用触发器。
:new:在触发器中的一个关键字,表示新记录。
在insert和update触发器中使用。
在delete触发器中:old,:old表示旧数据。