背景:
在上一章节中,讲到了权重,评分,指标
在开发当中,需求是多变的,权重占比可能产品一句话就产生了改变,最高评分和最低评分时刻会产生改变,指标的数量随时也可能增多
为了满足需求的多变,需要设计一套合理的数据库表结构
指标管理(元数据管理):指标表
分类(父节点),子分类(父节点),指标项(叶子节点)
可以看出一个典型的字典表结构
表可以设计为
id quota_code quota_name parent_code quota_level is_parent unit
quota_code与parent_code具有一对多关系,
unit 单位 例如:元 % 亿元 米 亩等
模板管理:模板表和模板明细表
每次综合评分的计算,不一定需要,所有指标参与计算综合评分,每个指标之间的权重占比可能也不一样,每次评分的最高得分也不一样,这个时候我们可以引入模板这一概念
具有和一般意义上的模板表和明细表相同的表结构
模板表
id templet_code temlet_name templet_type
明细表
id templet_code quota_code weight score_max score_min sort
注意:同一套模板当中,不同明细之间的最大(最小)得分都应该是相同的,在同一个分类下的指标(同级分类)的权重之和为100%
模板表和明细表具有一对多关系,通过templet_code关联
指标表与明细表同样具有一对多的关系,通过quota_code关联
数据管理:数据表
数据类型种类繁多,涉及到的表可能也不经相同,综合评分的计算当中,不同维度,不同类型数据都要参与计算,如果在多张数据表之间进行查询会大大的增加逻辑的复杂性且难以维护.为此,我们需要将不同类型不同维度的数据放同一张数据表当中(如果表太大,可以进行水平分表,增加查询的速度)
表结构:
id quota_code static_year area_code quota_value min_value max_value
指标表与数据表为一对多关系,quota_code关联关系
area_code为地区码
quota_value为具体的指标值
static_year为年份
min_value和max_value为在同一维度同一指标下的最大最小值(是一个必要的冗余)
同一维度指的是:同一年份,同一级别行政单位(省,市,区县)
在数据表中area_code,static_year,quota_code具有联合唯一性,即某一年的某一个地区的某个指标具有唯一值
在必要条件下可以增加例如parent_code(地区父节点码,指标父节点码),area_name地区名,quota_name指标名等冗余字段
后言:
至此整个综合评分的管理体系已经梳理完毕,权重和评分还有评分参与指标的管理可以通过模板管理来完成,新增的指标项可以通过指标管理来完成,但是新增指标项对应数据的录入,仍然需要人工进行导入(这是无法自动化的,旧的指标项可以通过程序的自动化完成新增数据录入)