第2章:结构化分析
2.4 数据字典 (DD)
💡 导读
在前面的章节中,我们已经学习了结构化分析(SA)的三大核心图形模型:
- 数据流图 (DFD):描述系统的功能与数据流向。
- E-R 图:描述系统的静态数据与实体关系。
- 状态转换图 (STD):描述系统的动态行为与状态控制。
这三张图构成了系统的“骨架”,但图形本身无法表达精确的底层细节(例如:“学号”到底有几位?“订单”到底包含哪些字段?)。本章要学习的 数据字典 (DD),正是为这些骨架填充血肉的“基因代码”。
1. 什么是数据字典?
【专业定义】数据字典(Data Dictionary, DD)是结构化分析方法中,对系统中出现的所有数据元素、数据流、数据存储和处理逻辑进行严格、详细、无歧义定义的文字说明集合。它本质上是一个**“元数据(Metadata,即关于数据的数据)”的仓库**。
【通俗理解】 如果说 数据流图(DFD) 是一张宏观的“物流路线图”,标明了货物从哪里发往哪里;那么 数据字典(DD) 就是每辆物流车上的“装箱清单”和“货物规格说明书”。
📌 重要警示
在实际软件工程中,前端工程师、后端工程师和数据库管理员对同一个业务词汇的理解往往不同。数据字典是全团队唯一的度量衡和契约,缺乏精确的数据字典,系统在后期集成阶段必然会因为数据格式不一致而导致严重错误。
2. 数据字典的四大核心条目
数据字典主要负责精准解释 DFD 中的各个元素,为了保证全面性,它通常被划分为以下四类核心条目:
数据项 (Data Item) 底层基础
- 深度定义:系统中最基础、不可再分的最小数据单位(又称原子数据)。它是所有复杂数据的基石。
- 必备属性:数据项名称、别名、数据类型(如:整型、字符型、日期型)、长度、取值范围或约束条件。
- 详细示例:
名称:读者证件号 别名:Reader_ID 类型:字符型 (String) 长度:10 位 约束:非空,且唯一。
数据结构 (Data Structure) 组合单元
- 深度定义:由若干个关联的“数据项”或较小的“子数据结构”组合而成的数据集合,用于描述某一具体业务实体的全貌。
- 必备属性:结构名称、组成结构说明。
- 详细示例:
名称:读者基本信息 组成:读者证件号 + 姓名 + 读者类别 + 联系电话 + (电子邮箱)
数据流 (Data Flow) 传输路径
- 深度定义:严格对应 DFD 图中的“数据流箭头”,描述数据在系统各模块之间的传输路径及其携带的具体内容。
- 必备属性:数据流名称、来源、去向、组成(通常由数据结构构成)、平均流量/高峰流量。
- 详细示例:
名称:借书请求 来源:外部实体(读者) 去向:加工(借阅处理模块) 组成:读者证件号 + 单本图书条码 + 当前日期
数据存储 (Data Store) 静态留存
- 深度定义:严格对应 DFD 图中的“数据存储(双横线)”,描述数据在系统中的静态留存状态,是设计物理数据库表的直接依据。
- 必备属性:存储名称、存储内容、主键/索引方式、读写权限。
- 详细示例:
名称:图书信息库 存储内容:{图书基本信息 + 单本图书信息 + 存放区域} 索引方式:以“ISBN”和“单本图书条码”为主键进行联合索引。
3. 描述数据的“语法”标准 (重点规范)
为了彻底消除自然语言的歧义,软件工程规定了五个标准符号来表达数据之间的组合关系。必须使用这套规范的“语法”来进行字典的编写。
| 符号 | 含义 | 解释与业务场景 | 示例 |
|---|---|---|---|
= | 被定义为 | 相当于“由...组成” | 姓名 = 姓 + 名 |
+ | 与 (顺序连接) | “且”,各项缺一不可 | 登录凭证 = 账号 + 密码 |
| **`[ | ]`** | 或 (选择) | “二选一 / 多选一” |
{ } | 重复 | “零个或多个的列表/集合” | 借阅记录表 = {单次借阅记录} |
( ) | 可选 | “可有可无的附加项” | 系统日志 = 操作时间 + 操作人 + (异常报错代码) |
4. 案例实战:高校图书借阅系统数据字典构建
⚙️ 业务背景:高校图书借阅系统
系统需求分析摘要:
- 管理员进入系统管理界面,单击 读者管理 或 图书管理 进行信息的增加、修改、删除和查询。可以单击 重置密码 按钮恢复读者默认密码。
- 读者在终端单击 借书、还书 或 续借。系统会对读者借阅状态进行验证:若有图书超期,则需支付罚款并归还后才可继续借书。
- 管理员和读者皆可单击 查询 按钮检索超期信息、借阅历史及个人基本信息。
- 输入/输出定义:读者输入借书/续借信息;系统输出借书/还书结果,并在发现超期时输出超期借阅信息。
- 数据模型 (E-R图) 实体包含:读者、读者类别、图书、单本图书、存放区域、管理员。
步骤一:使用标准符号进行逻辑拆解
针对上述流程中核心的**“借阅请求”和“借阅结果”**,我们使用规范符号进行自顶向下的逻辑拆解:
借阅请求 = 读者证件号 + 单本图书条码 + 操作类型 + 操作时间操作类型 = [ 借书 | 还书 | 续借 ]借书结果输出 = [ 借阅成功回执单 | 超期拒借提示 | 罚款缴费账单 ]超期借阅信息 = 读者证件号 + 姓名 + {超期图书书名 + 逾期天数 + 产生罚款金额}
步骤二:建立标准“数据字典词条表”
将符号推演转化为标准化工程档案(交付级文档)。
表 1:数据结构词条(描述复杂数据组合)
| 属性名称 | 详细描述 |
|---|---|
| 数据结构名 | 单本图书信息 |
| 别名 | Single_Book_Instance |
| 组成结构 | 单本图书条码 + 关联图书ISBN + 存放区域ID + 馆藏状态 |
| 业务说明 | 区分同一种书的不同副本,记录每一本实体书的具体在馆状况。 |
表 2:数据项词条(描述最底层的原子数据)
| 属性名称 | 详细描述 |
|---|---|
| 数据项名 | 馆藏状态 |
| 类型与长度 | 字符型 (String),最大长度 10 |
| 取值范围 | [ 在馆 | 借出 | 报损 | 遗失 ] |
| 默认值 | 在馆 |
| 约束条件 | 不可为空,借出时必须触发借阅记录生成。 |
步骤三:定义处理逻辑(判定表与判定树)
在 DFD 中,当读者单击 借书 时,系统触发**“借书资格验证”**加工。单纯的数据字典符号无法描述业务规则。基于需求中的:“若有图书超期则需支付罚款并归还后才可继续借书”,我们需要补充 判定表 (Decision Table) 或 判定树 (Decision Tree)。
展示形式 A:判定表 (Decision Table)
| 组成部分 | 规则 1 | 规则 2 | 规则 3 | 规则 4 |
|---|---|---|---|---|
| 条件 1:有超期未还图书? | ✔ | ✔ | ✖ | ✖ |
| 条件 2:已结清罚款并还书? | ✔ | ✖ | ||
| 动作 1:允许借新书 | ✔ | ✖ | ✖ | |
| 动作 2:拒绝借阅(提示超期) | ✔ | ✖ |
展示形式 B:判定树 (Decision Tree)
💡 实战小结
一个完善的数据字典档案,不仅需要包含静态的数据规格定义(符号拆解 + 词条表),还必须包含对动态处理逻辑的严谨描述(判定表 / 判定树)。两者结合才能彻底消除软件开发前期的模糊地带。
5. 知识串联:DD 与三大模型的关系
数据字典补全了结构化分析方法论的最后一块拼图。它与前序学习的三大模型之间存在严密的对应关系:
🧩 【关系图解】结构化分析核心架构
- DD 与 DFD(数据流图)—— 互为表里: DFD 中的每一个图形元素(数据流、数据存储、加工),必须且只能在 DD 中找到其内部细节的定义。
- DD 与 E-R 图(实体关系图)—— 静态映射: E-R 图中的“实体”(如:
图书、单本图书),直接对应 DD 中的“数据结构”;E-R 图中的“属性”,直接对应 DD 中的“数据项”。 - DD 与 STD(状态转换图)—— 动态触发: STD 中的“状态跃迁”(如单本图书从“在馆”变为“借出”),其本质是 DD 中数据项(如
馆藏状态)的值通过业务加工被修改。
总体结论:DFD、ER、STD 构建了系统的“骨架结构”,而数据字典(DD)注入了不可或缺的“参数定义”。它是需求分析阶段最具工程级落地价值的产物,是架构设计的重要参考标准。