有一次,一家企业提出了如下需求:他们希望能够出一份报表,报表的内容包括4个部分。一是成品零件的用量、零件的最小采购量等信息;二是当月零件的采购量信息;三是当月零件的出库信息;四是零件的安全库存信息。然后,根据这些信息计算出当月需要补下的满足安全库存的数量。从这个需求中可以看出,其主要设计到产品基本资料、采购、仓库等3个模块的内容。这么复杂的报表,从技术上来说,实现的难度并不是很大,但从准确性来看并不容易。
为此笔者根据自己的项目经验,提出了以下几个建议。
一是可以使用固化视图来改善数据库的性能。复杂报表所导致的不利影响,其首当其冲的是报表查询时速度会很慢,性能很低。为此在涉及到复杂报表时,开发人员可以考虑采用固化视图来改善数据库的性能。不过需要注意的是,物化视图也会带来一些负面影响。如物化视图的数据会保存在硬盘中,为此就会占用额外的存储空间等。
二是复杂的报表当设计到多表时,最好采用模块化的设计。如上面这个案例,至少可以将其分为四层。最基层是基本数据表,第二层是零件出库信息、当月采购信息等数据,第三层是根据第二层的数据进行计算分析;第三层视图再将这些视图进行连接。这么操作的话,方便后续的维护与查询。同时也可以提高查询的速度。为什么这么说呢?如在第二层视图设计中,可以对基础表的数据进行过滤。此时由于基础数据少,那么后续的报表查询速度也会加快。为此对于比较复杂报表的设计,要考虑分层设计的思路。以提高报表的查询性能与灵活性。
三是要考虑数据核对的需要。比较复杂的报表,其可能会涉及到多个不同的部门。笔者认为,可以将这些视图分模块化设计。如将涉及到不同的部门的信息先设计成不同的报表。在某个特定的时刻,如月末,先让各个部门的人员核对相关的数据。核对完成没有错误之后,再对相关的数据进行运算。而不是一开始就将所有数据在一张报表上显示。这会导致各个部门数据核对的麻烦,即各个部门不利于核对与自己相关的数据。 (李倩)