ESAP达摩院 思想有多远,我们就能走多远

ESAP第六弹 精简的艺术


概述

与以往不同,本次献上一份有料的中秋“ES月饼”:一个仅500K的ES数据库备份包。

消化这块“ES月饼”不但能掌握UD表视图汇总等设计方法,还能获得一套完整的多仓库+批次管理的ES仓储系统设计方案。

这个“月饼库”中实际上只包含4个模板,尽管如此,却足以颠覆许多朋友以往的经验和观念。

望月

  • 进入“月饼库”我们能看到三个分类:单据,基础和查询。

  • 单据中包含入库单出库单,基础中包含仓库信息物料表,一共四个模板。

–物料表–

–仓库信息–

–入库单–

  • 乍一看,示例数据很大众化。但我们要注意一个范式细节,入库单的明细部分只存储了编码批号数量备注

注:关于数据库范式,请自行查阅相关资料以了解。

探月

  • 打开入库单,我们能看到完整的单据,上面不仅有描述还有单位等信息。

  • 按照数据库范式,有了物料编号,那么描述单位等信息可以通过物料表查得,单据上就不需要保存这些字段。为了和用户交互,我们在数据明细表(D表)上叠加一个UI明细表(U表),这个U表不创建数据库表。这种设计方法就是UD表

注:关于叠加方法请参考第五弹移花接木

  • 入库单的数据表定义实际如下,主表外的两个明细表为:入库单_U、入库单_D。

邀月

  • 在前面的物料表中并没有定义库存字段,入库单和出库单中也没有回写公式。在“月饼库”查询分类下有一个库存表,它实际是一个视图汇总

  • 这个视图的定义如下:
create view v_ZKC
as
select B2.描述,B1.数量,B2.单位,B2.物料编码,B2.物料分类
from (
	select物料编码,sum(数量) as 数量
    from (  select 物料编码,数量
        from 入库单 A1,入库单_D A2 where A1.excelserverrcid=A2.excelserverrcid
        union all
        select 物料编码,-数量
        from 出库单 A3,出库单_D A4 where A3.excelserverrcid=A4.excelserverrcid
	) N
    group by 物料编码
) B1 
right join 物料表 B2 on B1.物料编码=B2.物料编码
  • 该视图除了做自定义库存查询,还可做单据中使用的库存列表数据规范的数据源。

  • “月饼库”除了总库存视图,还有进出明细视图,批次库存视图,在此不再赘述。

查看代码

  1. 品月

“月饼库”是一个较完整的生态,也是所有系统的一个缩影,例如:BOMCRMHRMMRP等。

本文着重介绍其中的两种设计方法:UD表视图汇总。使用UD表可以使数据库设计符合范式,减少冗余;而使用视图汇总除了避免表间公式偶尔失灵的尴尬,还能有效减小数据库体积。

关于“月饼库”中的其他技巧细节,需要读者慢慢体会。


近似文章