阅读以下关于数据库设计的叙述,在答题纸上回答问题1至问题3。 某航空公司要开发一个订票信息处理系统,以方便各个代理商销售机票。开发小组经过设计,给出该系统的部分关系模式如下: 航班(航班编号,航空公司,起飞地,起飞时间,目的地,到达时间,剩

admin2017-09-13  36

问题 阅读以下关于数据库设计的叙述,在答题纸上回答问题1至问题3。
    某航空公司要开发一个订票信息处理系统,以方便各个代理商销售机票。开发小组经过设计,给出该系统的部分关系模式如下:
    航班(航班编号,航空公司,起飞地,起飞时间,目的地,到达时间,剩余票数,票价)
    代理商(代理商编号,代理商名称,客服电话,地址,负责人)
    机票代理(代理商编号航班编号,票价)
    旅客(身份证号,姓名,性别,出生日期,电话)
    购票(购票单号身份证号航班编号,搭乘日期,购票金额)
    在提供给用户的界面上,其核心功能是当用户查询某航班时,将该航班所有的代理商信息及其优惠票价信息,返回给用户,方便用户购买价格优惠的机票。在实现过程中发现,要实现此功能,需要在代理商和机票代理两个关系模式上进行连接操作,性能很差。为此开发小组将机票代理关系模式进行了扩充,结果为:
    机票代理(代理商编号,航班编号,代理商名称,客服电话,票价)
    这样,用户在查找信息时只需对机票代理关系模式进行查询即可,提高了查询效率。
机票代理关系模式的修改,满足了用户对代理商机票价格查询的需求,提高了查询效率。但这种修改导致机票代理关系模式不满足3NF,会带来存储异常的问题。
    1)请具体说明其问题,并举例说明。
    2)这种存储异常会造成数据不一致,请给出解决该存储异常的方案。

选项

答案具体问题有数据冗余和更新异常。 数据冗余:代理商名称和客服电话存在于两个关系模式,而且机票代理关系模式中,该代理商代理了多少个航班,则代理商名称和客服电话被重复存储多少次。 更新异常:当代理商名称或客服电话变更时,不仅需要修改代理商关系模式,还需要修改机票代理关系模式,否则会造成数据不一致。 可采用两种方案实现。 (1)通过程序实现,当修改代理商关系模式数据时,程序同步修改机票代理关系模式; (2)通过触发器实现,在代理商关系模式上加修改触发器,当修改代理商关系模式数据时,程序同步修改机票代理关系模式。

解析 本问题考查数据库设计中关系范式规范化和反规范化的相关知识。众所周知,关系范式规范化的结果是关系越来越小,关系范式的概念越单一。但是要解答用户的问题,往往会涉及到多表关联操作,影响查询效率。因此应用中经常采用反规范化的方法来提高查询效率。因此开发小组对机票代理关系模式的修改属于反规范化。
    但是反规划带来的直接结果是数据冗余存放,如题干描述的机票代理中,代理商名称和客服电话数据就存在于机票代理和代理商两个模式中。这种情况会引起更新异常,比如当代理商名称或客服电话变更时,不仅需要修改代理商关系模式,还需要修改机票代理关系模式,否则会造成数据不一致。
    要解决范式规范化带来的问题,主要是保持两个地方存储数据的一致性。常见的方法有两种:一种是通过程序实现,在业务程序中,当修改代理商关系模式数据时,程序同步修改机票代理关系模式;另一种是通过触发器实现,在代理商关系模式上加修改触发器,当修改代理商关系模式数据时,程序同步修改机票代理关系模式。
转载请注明原文地址:https://kaotiyun.com/show/UpQZ777K
0

最新回复(0)