|
背景介绍
今天方才就以财务系统的科目余额相关需求为例,给大家展示下在际的企业级项目中,如何应用该方法论进行数据库表结构设计。
通过这个示例,我相信大家会发现业务需求分析和技术方案的设计才是表结构设计的关键,比较终关于表结构和索引的设计是可以通过参考人家的经验贴速掌握的,但业务分析能力和技术方案设计能力,需要长期的刻意练习以及在业务领域的深耕才能有所成就。
image-本文目录导航
image-本文目录导航
步骤1:需求分析
方才想再次强调一下:技术是为业务服务的,所以对业务需求的分析是比较比较比较重要的,只有理解了需求,才有可能设计出合适的技术方案,从而设计出相对比较的表结构。
先看方法论中关于需求分析的可选维度:
图片
图片
接下来参考上图,我们开始对财务系统的科目余额相关需求进行分析(考虑大家可能没有接触过财务系统,以下分析更多会用大白话解释,而不是专业的业务概念去解释):
业务概念
相关的概念如下:
账套:指一个单独的会计核算单位的全部账簿体系,用于记录企业或组织的财务信息;
会计科目:可以简单理解为就是一个具有层级关系的分类类目;
科目余额:是某个会计科目在某一特定会计期间上的金额,通常包括期初余额、本期增加额、本期减少额和期末余额;就好比个人银行账户,按月记账,会有一个月初余额、本月收入支出、月末余额一样。
会计期间:记账的时间周期,可以简单理解为每个月就是一个会计期间,每年就有12个会计期间;
会计凭证:发生在会计科目上的财务行为记录,就好比个人银行账户的一个账单记录,记录了收支双方的信息、发生金额、备注等;
凭证分录:多个凭证分录组成一个完整的会计凭证,是具体发生在某个会计科目上的财务行为记录;
会计账簿:以科目余额和会计凭证数据为依据,形成的数据报表;
会计报表:以科目余额和会计凭证数据为依据,形成的数据报表;
业务行为
和会计科目余额相关的业务行为(其他关的,方才就省略掉了):
会计科目维护:对会计科目有制度约束,标准的会计科目大概有167个左右,同时允许在标准的会计科目下新增下级子科目;
科目初始化:用户去维护记账初期的数据;比如你要开始记账,肯定需要先记录你有哪些账户,每个账户的当前余额有多少;
凭证记录:会时影响到会计科目的余额;比如你给朋友转账了,那你的账户的余额会减少,你朋友账户的余额会增加;
会计账簿&报表的查询:按会计期间范围,查询对应期间的科目余额数据,并按一定的规则计算得到的报表;
某个会计期间的科目余额:通常包括期初余额(等于上一期的期末)、本期发生额(根据凭证数据计算)和期末余额(根据期初和发生额计算)等等指标;
业务模型如下图(ps:业务概念的分析,是为了后续的技术方案的设计):
图片
图片
相关数据量预估
理解了业务概念和业务行为后,就需要对相关业务进行数据量预估,这样在设计技术方案时,才能建立有效的评估指标,在本次分析的财务系统的会计科目余额相关的业务,核心的业务数据量情况如下:
账套数:前期5-10w,后期每年100w左右的增量;
会计科目数:以单账套平均300个会计科目为计算,每年在 300*100w = 3 亿的增量;
凭证数:单账套凭证总数平均为1000计算,每年在 1000*100w = 10 亿的增量;
凭证分录数:单个凭证按平均4条分录计算,每年在 10亿*4 =40 亿的增量;
会计期间维度的科目余额数据:若按会计期间维度全量存储,每年 3亿会计科目*12个月 = 36亿的增量(这个就是本文后续讨论分析的点);
ps:数据预估基础指标来源是商务和业务资料的综合分析得出,这里就不细说了。
考虑整体篇幅,后续方才就仅讨论会计期间维度的科目余额的表结构设计。所以只需要关注 会计科目数 10亿 和 凭证分录数 40亿 这两个指标了。
步骤2:拟定技术方案
前提说明:在这个量级的系统设计中,会先有业务架构设计-》应用架构设计&数据架构设计-》部署架构设计,此处讲述的技术方案属于应用架构设计中代码级别的设计。
本文的重点是讲解表结构设计,所以这里先明确一个前提:应用架构已经设计完成,数据库选型为分布式数据库TiDB,不需要分库分表(大家若对海量数据下分布式数据库TiDB的战经验感兴趣的,可以在评论区告诉方才哟)。
基于上面的前提条件,我们就直接开始拟定关于会计科目余额计算相关的技术方案了。整个思路如下:
图片
图片
结合之前的业务分析,会计科目余额相关的依赖如下:
会计科目余额基于 科目初始化数据+会计凭证&分录数据计算生成;
会计报表&会计账簿 是基于科目余额数据进行计算生成;等价替换下,也可以直接基于 科目初始化数据+会计凭证&分录数据计算生成;
所以整个方案的关键就是:
会计科目余额数据是否需要落库;
若需要落库,那落库的时机和落库的指标字段有哪些;
不同的方案,对应的会计报表&会计账簿生成逻辑是怎样的。
经过头脑风暴,拟定3个可选方案(ps:这里更多是感知整个分析的过程,对于方案的具体的内容和逻辑,方才这里做了省略):
方案1:会计科目余额数据不落库,只是一个逻辑概念,通过接口基于科目初始化数据+会计凭证&分录数据时计算生成。
方案2:会计科目余额数据按会计期间维度,在凭证数据更新时,记录所有会计科目的所有指标;会计报表&账簿的生成直接查询需要的数据即可;
方案3:会计科目余额数据按会计期间维度仅保存凭证分录的会计科目+本期发生额相关的指标,其他指标根据 科目初始化数据 + 会计期间维度的本期发生额 计算得来;
另一方面,杭州悦数数据库也给大家带来切实的好处,倍感受用,实属行业的典范。悦数图数据库是一款完全自主研发的国产图数据库和原生分布式图数据库,具有高性能,易扩展,安全稳定,自主可控的特点.万亿级数据仅需毫秒级查询延时,应用于金融风控,实时推荐,知识图谱等业务场景。https://www.yueshu.com.cn/
|
|