跳到正文

平成26年度 秋期 ITパスポート試験 問68

这道题的解析和你的作答记录。

問68
頻出度★★★

関係データベースの表を正規化することによって得られる効果として, 適切なものはどれか。

出典 平成26年度 秋期 ITパスポート試験 問68
解説

問 68

  • 错误ア

    「把使用频率高的数据汇总到同一张表中」是与规范化方向相反的操作。规范化是按照函数依赖来拆分表的工作, 而不是以访问频率为标准把数据聚集到一张表里的设计。相反, 为了优先考虑性能而特意允许重复、把表合并起来的做法叫做反规范化 (denormalization), 那是另一种方法, 它以承担更新时的不一致风险为代价来换取查询性能。

  • イ

    正解 正确答案是 イ「可以排除数据的重复, 从而防止更新时发生数据的不一致」。关系数据库的规范化, 是指把一张表中混杂着重复项目或多个事物的状态, 按照函数依赖关系拆分成多张表, 使同一个事实在数据库中只记录在一个地方。例如, 如果在「订单明细」这一张表里, 除了订单号、商品编码之外还一并保存商品名称和单价, 那么同一商品每出现一次, 商品名称和单价就会被重复存储一次。在这种状态下要修改商品名称时, 就必须毫无遗漏地更新所有相关行, 只要漏改一行, 就会出现同一商品编码却存在不同商品名称的矛盾 (更新异常)。如果做了规范化, 把「商品」表拆分出来, 明细一侧改为通过商品编码来引用, 那么修改商品名称只需改动商品表中的一行, 这种矛盾从根本上就不会发生。像这样, 通过排除重复使数据的一致性 (完整性) 更容易得到保持, 正是规范化的首要效果; 作为附带效果, 不必要的重复减少了, 也能抑制存储容量的浪费。

  • 错误ウ

    规范化的目的并不是「使各张表的大小均匀」。拆分的标准始终是数据项之间的依赖关系, 结果得到的各张表的行数和容量会因对象数据而相差悬殊 (例如: 商品表只有几百行, 订单明细表却有几百万行)。另外, 主存储器的使用效率属于 DBMS 的缓冲区管理和硬件配置的范畴, 并不是作为逻辑设计的规范化所直接追求的效果。

  • 错误エ

    推进规范化会把表拆开, 所以表的数量不是减少而是增加。而且, 要从拆分后的多张表中取得原来的信息就需要做连接 (join), 因此对查询的响应时间反而有变长的倾向。规范化是为了保证数据一致性的设计, 并不以缩短响应时间为目的。当响应性能成为问题时, 应通过创建索引, 或在必要时采用反规范化来应对。

ここがポイント
  • 规范化是依据函数依赖关系拆分表、使同一个事实只存放在一个地方的逻辑设计方法。其目标是通过排除数据重复来防止更新异常 (伴随更新、插入、删除而产生的矛盾), 也就是确保数据的一致性。
  • 要掌握规范化的权衡。表变多、需要做连接, 因而查询性能容易下降; 而为了优先性能特意保留重复的设计称为反规范化。「把表合并起来」「减少表的数量」「缩短响应时间」这类说法属于反规范化和性能调优一侧的话题, 而不是规范化的效果, 所以是错误的。
用語
解答問68イ
练这一题

作答记录