软件工程《订单管理系统》知识点:
[1] 数据流图和数据字典在软件需求分析阶段和设计阶段的作用
[2] 反规范化技术的思想
[3] 物理数据分区技术
【案例描述】
某电商企业随着业务不断发展,订单量不断增加,每月订单超过了 100 万笔,急需开发一套专门的订单管理系统,旨在能够对订单数据进行分析和挖掘,以帮助企业深入了解顾客行为、优化运营流程并提高整体盈利能力。该系统采用结构化分析与设计方法。
考虑订单数据过多,单一表的设计会对系统性能产生较大影响,仅仅采用索引不足以解决性能问题。因此,需要将订单表拆分,按月存储。
王工采用反规范化设计方法来解决,给出了相应的解决方案。李工负责数据中心的设计与开发。李工认为王工的解决方案存在问题,建议采用数据物理分区技术。在解决性能问题的同时,也为后续的数据迁移、数据挖掘和分析等工作提供支持。
【问题1】数据字典是一种用户可以访问的记录数据库和应用程序元数据的目录。说明数据流图和数据字典在软件需求分析阶段和设计阶段的作用。
参考答案:
数据流图:
(1)数据流图在需求分析阶段的作用:
数据流图用于界定系统上下文范围和建立业务流程的加工说明,自顶向下的功能分解,指明数据在系统内移动变换,描述功能及加工规约。
(2)数据流图在设计阶段的作用:
将分解阶段的结果(数据流图)映射成软件体系结构,为模块划分和模块之间的接口设计提供依据。
数据字典:
(1)数据字典在需求分析阶段的作用
用于建立业务概念的集合,是模型核心库,有组织的系统相关元素列表,使涉众对模型元素有共同的理解。
(2)数据字典在设计阶段的作用
根据数据字典中的数据存储来建立数据存储设计。
【问题2】用300字的文字说明下常见的5种反规范化技术的思想。有如下关系模式:
客户表 (Customers):
- CustomerID: 客户唯一标识
- Name: 客户姓名
- Email: 客户邮箱地址
- Phone: 客户联系电话
- Address: 客户地址
订单表 (Orders):
- OrderID: 订单唯一标识
- CustomerID: 下单客户的标识
- OrderDate: 下单日期
- Status: 订单状态 (如待支付、已发货等)
- TotalAmount: 订单总金额
在对订单表进行统计分析时,由于经常需要在订单表中查询“客户姓名”和“客户联系电话”的信息,故设计了额外的一张订单表,如下所示:
订单表 (Orders_ Analysis):
- OrderID: 订单唯一标识
- CustomerID: 下单客户的标识
- OrderDate: 下单日期
- Status: 订单状态 (如待支付、已发货等)
- TotalAmount: 订单总金额
- Name: 客户姓名
- Phone: 客户联系电话
该方法采取了那种反规范化技术?有什么缺点?
参考答案:
增加冗余列:在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作。
增加派生列:在表中增加可以由本表或其它表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数。
重新组表:如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
水平分割表:根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少 I/O 次数。
该方法采取了增加冗余列的反规范化技术,缺点使增加了数据冗余,浪费存储空间。
【问题 3】
物理数据分区技术一般分为水平分区和垂直分区,数据库中常见的是水平分区。水平分区分为范围分区、哈希分区、列表分区等。请阅读下表,在(1)~(8) 中填写不同分区方法在数据值、数据管理能力、实施难度与可维护性、数据分布等方面的特点。
范围分区 |
哈希分区 |
列表分区 | |
数据值 |
( 1 ) |
连续离散均可 |
( 2 ) |
数据管理能力 |
强 |
( 3 ) |
( 4 ) |
实施难度与可维护性 |
( 5 ) |
好 |
( 6 ) |
数据分布 |
( 7 ) |
( 8 ) |
不均匀 |
参考答案:
范围分区 |
哈希分区 |
列表分区 | |
数据值 |
( 1 )连续 |
连续离散均可 |
( 2 )离散 |
数据管理能力 |
强 |
( 3 )弱 |
( 4 )强 |
实施难度与可维护性 |
( 5 )好 |
好 |
( 6 )好 |
数据分布 |
( 7 )不均匀 |
( 8 )均匀 |
不均匀 |