阅读以下关于软件系统数据建模的说明。 [说明] 某软件公司成立项目组为某高校开发一套教职工信息管理系统。与教职工信息相关的数据需求和处理需求如下: (1)数据需求:在教职工信息中能够存储学校所有在职的教工和职工信息,包括姓名、所属部门、出

admin2012-07-19  44

问题 阅读以下关于软件系统数据建模的说明。
   [说明]
   某软件公司成立项目组为某高校开发一套教职工信息管理系统。与教职工信息相关的数据需求和处理需求如下:
   (1)数据需求:在教职工信息中能够存储学校所有在职的教工和职工信息,包括姓名、所属部门、出生年月、工资编号、工资额和缴税信息;部门信息中包括部门编号、部门名称、部门人数和办公地点信息。
   (2)处理需求:能够根据编制内或外聘教职工的工资编号分别查询其相关信息;每个月的月底统一核发工资,要求系统能够以最快速度查询出教工或者职工所在部门名称、实发工资金额;由于学校人员相对稳定,所以数据变化及维护工作量很少。
   项目组王工和李工针对上述应用需求分别给出了所设计的数据模型(如图2-1和图2-2所示)。王工遵循数据库设计过程,按照第三范式对数据进行优化和调整,所设计的数据模型简单且基本没有数据冗余;而李工设计的数据模型中存在大量数据冗余。
   项目组经过分析和讨论,特别是针对数据处理中对数据访问效率的需求,最终选择了李工给出的数据模型设计方案。
请简要叙述常见的反规范化技术有哪些。

选项

答案常见的反规范化技术包括: (1)增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作; (2)增加派生列:在表中增加可以由本表或其他表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数; (3)表水平分割:根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用; (4)表垂直分割:对表进行分割,将主键与部分列放到一个表中,主键与其他列放到另一个表中,在查询时减少I/O次数。

解析  常用的反规范技术有增加冗余列、增加派生列和分割表,分割表包括水平分割和垂直分割两种形式。(1)增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。(2)增加派生列指增加的列来自其他表中的数据,由它们计算生成。它的作用是在查询时减少连接操作,避免使用集函数。(3)表水平分割根据一列或多列数据的值把数据行放到两个独立的表中。水平分割通常在下面的情况下使用:①表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。②表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。③需要把数据存放到多个介质上。(4)表垂直分割把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要join操作。
转载请注明原文地址:https://jikaoti.com/ti/KE67FFFM
0

最新回复(0)