首页 >> 牛刀云小程序开发教程 >> 第1篇 制作模式 >> 性能优化

11.1 数据集设计原则

数据集是对客观世界的高度抽象。好数据集的标准是:结构清晰、关联简洁、个数适中、列设置合理、没有重复性冗余。

 

1. 原始单据与数据集之间的关系

可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个数据集。 在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单据对应多个数据集,或多张原始单据对应一个数据集。明确这种对应关系后,对设计界面大有好处。

例如:一份员工履历资料,在人力资源信息系统中,就对应三个数据集:员工基本情况、社会关系、工作简历。这就是“一张原始单据对应多个数据集”的典型例子。

 

2、正确处理一对多的关系

一个数据集中的列个数越少越好。只有列的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,更重要的是学会“列变行”,这样就防止了将子数据集中的列拉入到主数据集中去,在主数据集中留下许多空余的列。所谓“列变行”,就是将主数据集中的一部分列拉出去,另外单独建一个子数据集。

例如:不同的商品有不同的规格,服装类商品有颜色、尺码等规格;手机类商品有机身颜色、存储容量等规格。如果在购物车数据集中增加颜色、尺码、机身颜色和存储容量等列,就会导致在增加服装类商品后,机身颜色和存储容量列空着;在增加手机类商品后,颜色和尺码列空着。随着商品规格的增多,空着的列会更多。这时就应该改造购物车数据集的设计,使用“列变行”的方法,去掉购物车数据集中属于商品规格的列,增加购物车规格数据集,它的列为:主键、购物车主键、规格名称、规格。在增加服装类商品后,同时向购物车规格数据集中增加两行,一行的规格名称是颜色,一行的规格名称是尺码。

 

3、处理多对多的关系

若两个数据集之间存在多对多的关系,则应消除这种关系。消除的办法是,在两者之间增加第三个数据集。这样,原来一个多对多的关系,现在变为两个一对多的关系。要将原来两个数据集的列合理地分配到三个数据集中去。

例如:在“图书馆信息系统”中,“图书”是一个数据集,“读者”也是一个数据集。这两个数据集之间的关系,是一个典型的多对多关系:一本图书在不同时间可以被多个读者借阅,一个读者又可以借多本图书。为此,要在二者之间增加第三个数据集,该数据集取名为“借还书”,它的列为:图书主键、读者主键、借还时间、借还标志(0表示借书,1表示还书)。

 

4. 正确认识数据冗余

数据库中数据集的个数越少越好,一个数据集中的列个数越少越好。但是,每个数据集都有一个主键列,设置为从数据集后,还会增加外键列。主键是数据集的高度抽象,外键表示数据集之间的关联。主键与外键在多个数据集中的重复出现, 不属于数据冗余,非主外键字段的重复出现, 才是数据冗余!而且是一种低级冗余,即重复性的冗余。高级冗余不是列的重复出现,而是列的派生出现。

例如:商品数据集中,有“主键”、“商品名称”、“商品图片”列。订单商品数据集中,有“主键”、“订单主键”、“商品主键”、“商品名称”、“商品图片”、“数量”、“单价”和“金额”等列,其中“商品名称”和“商品图片”可以通过“商品主键”列从商品数据集中获取;“金额”可以由“单价”乘以“数量”得到,说明“商品名称”、“商品图片”和“金额”都是冗余字段。其中“商品名称”、“商品图片”是重复性冗余,属于低级冗余,而“金额”不是重复性冗余,属于高级冗余。

事实上,在反对低级冗余的同时,提倡增加高级冗余,可以提高查询统计的速度。在订单商品数据集中增加“金额”这个冗余字段,就是以空间换时间的做法。