某集团公司在各省均设有分公司,现欲建立全国统一销售管理信息系统,以便总公司及时掌握各分公司销售情况。公司成立专门项目组进行该系统研发工作,其中张工负责其中数据库设计工作。张工和需求分析小组紧密合作,在设计出数据流图和数据字典基础上,给出了数据库关系模式和相应索引设计。同时考虑到未规范化关系模式可能引起各类数据错误,对关系模式进行了全面规范化处理,使所有关系模式均达到了3NF或BCNF。在项目实施过程中,应用开发小组认为该设计方案未考虑应用功能实际需求。如果严格按照设计方案实施,会对应用系统中整体性能产生较大影响。主要原因在于进行数据查询时,会产生大量多表连接操作,影响性能。而设计方案中索引设计,并不能完全满足数据查询性能要求。应用开发小组还认为,该设计方案未考虑到信息系统中核心销售数据处理特点:各分公司在使用该信息系统时只能操作自己分公司销售数据,无权操作其它分公司销售数据;只有总公司有权利操作所有销售数据,以便进行统计分析。应用开发小组要求,在数据库设计方案中,必须针对实际应用功能实现来考虑关系模式规范化,必要时需要采用逆规范化或解除规范化方法来保证性能要求。【问题1】系统需要管理供应商和货物等信息,具体包括供应商姓名、地址以及货物名称、价格等,供应商可以提供0~n种货物,其公司地址也可能发生变化。请以供应商关系模式supplier(name,address,product,price)为例,解释不规范关系模式存在哪些问题。【问题2】应用开发小组认为张工规范化设计虽然解决了未规范化关系模式带来问题,但实际实现功能时会造成系统性能下降,请解释其原因。【问题3】请解释逆规范化方法,说明其优缺点。【问题4】针对该信息系统中核心销售数据处理特点,如采用关系表水平分割逆规范化方法,请给出具体解决方案,并说明该方案存在问题。
正确答案及解析
正确答案
解析
一、试题分析本题是一个数据库设计方面考题,考查知识点包括规范化理论和反规范化理论(逆规范化)。规范化基本思想是逐步消除不合适函数依赖,使数据库中各个关系模型达到某种程度分离。规范化解决主要是单个实体质量问题,是对于问题域中原始数据展现正规化处理。规范化理论给出了判断关系模型优劣理论标准,帮助预测模式可能出现问题,是数据库逻辑设计指南和工具,具体有:(1)用数据依赖概念分析和表示各数据项之间关系。(2)消除E-R图中冗余联系。若不进行规范化处理,可能产生问题包括:数据冗余、修改异常、插入异常、删除异常。下面举例说明这些问题具体表现形式。设有一个关系模式R(SNAME,CNAME,TNAME TADDRESS),其属性分别表示学生姓名、选修课程名、任课教师姓名和任课教师地址。仔细分析一下,就会发现这个模式存在下列存储异常问题:(1)数据冗余:如果某门课程有100个学生选修,那么在R关系中就要出现100个元组,这门课程任课教师姓名和地址也随之重复出现100次。(2)修改异常:由于上述冗余问题,当需要修改这个教师地址时,就要修改100个元组中地址值,否则就会出现地址值不一致现象。(3)插入异常:如果不知道听课学生名单,这个教师任课情况和家庭地址就无法进入数据库;否则就要在学生姓名处插入空值。(4)删除异常:如果某门课程任课教师要更改,那么原来任课教师地址将随之丢失。在本题中,也存在同样问题:(1)数据冗余:关系模式中多次重复记录了同一供应商地址。(2)插入异常:如果还未确定一个供应商有哪些货物,只是想添加一个供应商地址信息,则会产生产品与价格均为空记录。(3)修改异常:当修改一个供应商地址时,需要将多条记录同时更新,若未同时更新,则数据产生不一致。(4)删除异常:当删除一个供应商货物时,其地址信息被一并删除。数据库中数据规范化优点是减少了数据冗余,节约了存储空间,相应逻辑和物理I/O次数减少,同时加快了增、删、改速度,但是对完全规范数据库查询,通常需要更多连接操作,从而影响查询速度。因此,有时为了提高某些查询或应用性能而破坏规范规则,即反规范化(非规范化处理)。因此,题目中所说“应用开发小组认为张工规范化设计虽然解决了未规范化关系模式带来问题,但实际实现功能时会造成系统性能下降”,主要就是查询效率下降。其原因是规范化过程中对数据表进行了不断拆分,导致一个查询需要进行多表连接,效率自然就下降了。具体来说,常见反规范化技术包括:(1)增加冗余列增加冗余列是指在多个表中具有相同列,它常用来在查询时避免连接操作。例如:以规范化设计理念,学生成绩表中不需要字段“姓名”,因为“姓名”字段可以通过学号查询到,但在反规范化设计中,会将“姓名”字段加入到表中。这样查询一个学生成绩时,不需要与学生表进行连接操作,便可得到对应“姓名”。(2)增加派生列增加派生列指增加列可以通过表中其它数据计算生成。它作用是在查询时减少计算量,从而加快查询速度。例如:订单表中,有商品号、商品单价、采购数量,我们需要订单总价时,可以通过计算得到总价,所以规范化设计理念是无须在订单表中设计“订单总价”字段。但反规范化则不这样考虑,由于订单总价在每次查询都需要计算,这样会占用系统大量资源,所以在此表中增加派生列“订单总价”以提高查询效率。(3)重新组表重新组表指如果许多用户需要查看两个表连接出来结果数据,则把这两个表重新组成一个表来减少连接而提高性能。(4)分割表有时对表做分割可以提高性能。表分割有两种方式:水平分割:根据一列或多列数据值把数据行放到两个独立表中。水平分割通常在下面情况下使用:情况1:表很大,分割后可以降低在查询时需要读数据和索引页数,同时也降低了索引层数,提高查询速度。情况2:表中数据本来就有独立性,例如表中分别记录各个地区数据或不同时期数据,特别是有些数据常用,而另外一些数据不常用。情况3:需要把数据存放到多个介质上。垂直分割:把主码和一些列放到一个表,然后把主码和另外列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要连接操作。 问题4要求提出水平分割方案,实际上就是把数据表按记录进行拆分,并存储于不同位置。由于本题中数据使用存在这样特性——“各分公司在使用该信息系统时只能操作自己分公司销售数据,无权操作其它分公司销售数据;只有总公司有权利操作所有销售数据,以便进行统计分析”,所以按省,每个分公司存储自己数据,这样能达到高效查询目,只是这样会让总公司统计分析变得十分低效。二、参考答案【问题1】(1)数据冗余:关系模式中多次重复记录了同一供应商地址。(2)插入异常:如果还未确定一个供应商有哪些货物,只是想添加一个供应商地址信息,则会产生产品与价格均为空记录。(3)修改异常:当修改一个供应商地址时,需要将多条记录同时更新,若未同时更新,则数据产生不一致。(4)删除异常:当删除一个供应商货物时,其地址信息被一并删除。【问题2】数据库规范化过程,实际是对数据表不断拆分,以达到更高规范程度。这样处理,带来问题是:系统中大量查询不能通过单表完成,而需要将多表进行连接查询,所以表拆分得越多,查询性能也就越差。【问题3】逆规范化方法优点:提高统计、查询效率。逆规范化方法缺点:增加了数据冗余,浪费存储空间,增、删、改操作效率降低,可能导致数据不一致,可能产生添加、修改、删除异常。【问题4】解决方案:将各省数据存放于各省分公司。该方案主要问题在于总公司进行全国数据统计时,需要从各省服务器调取数据,效率较低。
你可能感兴趣的试题
在几种不同类型的软件维护中,通常情况下()所占工作量最大。
-
- A.更正性维护
- B.适应性维护
- C.完善性维护
- D.预防性维护
- 查看答案
在()中,项目经理的权力是最小的。
-
- A.强矩阵型组织
- B.平衡矩阵组织
- C.弱矩阵型组织
- D.项目型组织
- 查看答案
在项目实施的过程中,项目经理通过项目周报中的项目进度分析图表发现机房施工进度有延期风险。项目经理立即组织相关人员进行分析,下达了关于改进措施的书面指令。该指令属于( )
-
- A.检查措施
- B.缺陷补救措施
- C.预防措施
- D.纠正措施
- 查看答案
-
- A.见图A
- B.见图B
- C.见图C
- D.见图D
- 查看答案
-
- A.见图A
- B.见图B
- C.见图C
- D.见图D
- 查看答案