数据库设计与E-R模型
第五章:数据库设计
💡 本章整合了概念模型、ER图、关系模型、转换规则等内容,形成完整的数据库设计知识体系
5.1 数据库设计概述
5.1.1 什么是数据库设计
定义:数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求。
核心问题:如何设计一个结构合理、使用方便、效率高的数据库?
设计目标:
- 满足用户的信息需求
- 满足用户的处理需求
- 保证数据的完整性和安全性
- 具有良好的性能
5.1.2 数据库设计的特点
| 特点 | 说明 |
|---|---|
| 三分技术,七分管理,十二分基础数据 | 强调管理和基础数据的重要性 |
| 结构设计和行为设计相结合 | 既要设计数据结构,也要设计处理流程 |
| 多学科综合 | 涉及计算机、管理学、应用领域知识 |
5.1.3 数据库设计方法
规范设计法的代表:
- 新奥尔良法:将数据库设计分为若干阶段和步骤
- 基于E-R模型的设计方法:目前最常用的方法
- 基于3NF的设计方法:基于规范化理论
5.1.4 数据库设计的六个阶段
| 阶段 | 主要任务 | 产出物 |
|---|---|---|
| 需求分析 | 调查用户需求,画数据流图(自顶向下) | 需求说明书、数据流图 |
| 概念设计 | 设计E-R图(实体联系模型) | E-R图(概念模型) |
| 逻辑设计 | 将E-R图转换为关系模式 | 表结构定义 |
| 物理设计 | 确定存储结构、索引策略 | 物理存储方案 |
| 实施 | 创建数据库、建表、导入数据 | 实际的数据库 |
| 运行维护 | 监控、备份、优化、调整 | 稳定运行的系统 |
5.2 数据建模:三个世界的转换
💡 数据库设计就是把现实世界的事物,一步步抽象成计算机能存储的数据
5.2.1 三个世界
5.2.2 两级抽象
| 抽象级别 | 从...到... | 模型类型 | 工具 |
|---|---|---|---|
| 第一级抽象 | 现实世界 → 信息世界 | 概念模型 | E-R图 |
| 第二级抽象 | 信息世界 → 计算机世界 | 数据模型 | 关系模式(表结构) |
📌 重点:概念模型是独立于DBMS的,数据模型是依赖于具体DBMS的
5.3 需求分析
5.3.1 需求分析的任务
主要任务:
- 信息需求:用户需要存储和管理哪些数据
- 处理需求:用户需要对数据进行哪些操作
- 安全性需求:数据的保密性和访问控制要求
- 完整性需求:数据的正确性和一致性要求
5.3.2 需求分析的方法
| 方法 | 说明 | 特点 |
|---|---|---|
| 调查研究 | 访谈、问卷、观察 | 获取第一手资料 |
| 自顶向下 | 从全局到局部分解 | 结构清晰,不遗漏 |
| 自底向上 | 从具体到抽象归纳 | 细节准确 |
| 结构化分析(SA) | 使用数据流图等工具 | 规范、直观 |
5.3.3 数据流图(DFD)
数据流图的符号:
| 符号 | 名称 | 含义 |
|---|---|---|
| ○ 或 ◯ | 加工/处理 | 对数据的操作 |
| → | 数据流 | 数据的流向 |
| = 或 ▭ | 数据存储 | 数据保存的地方 |
| □ | 外部实体 | 系统外部的人或系统 |
数据流图示例(图书借阅系统):
flowchart LR
Reader[读者] -->|借阅请求| P1((借阅处理))
P1 -->|借阅信息| D1[(借阅记录)]
P1 -->|更新库存| D2[(图书库存)]
D2 -->|库存信息| P1
P1 -->|借阅结果| Reader
5.3.4 数据字典
定义:数据字典是对数据流图中各元素的详细描述
内容:
| 内容 | 描述 |
|---|---|
| 数据项 | 最小数据单位(字段)的描述 |
| 数据结构 | 数据项的组合方式 |
| 数据流 | 数据的流动情况 |
| 数据存储 | 数据保存的方式 |
| 处理过程 | 对数据的操作描述 |
数据项描述示例:
数据项名:学号
别名:学生编号、Sno
类型:字符型
长度:10
取值范围:以年份开头的10位数字
含义说明:学生的唯一标识
5.4 概念结构设计(E-R模型详解)
💡 概念设计是数据库设计中最重要的阶段,产出的E-R图是后续所有工作的基础
5.4.1 概念设计的特点
| 特点 | 说明 |
|---|---|
| 独立于DBMS | 不依赖于任何具体的数据库管理系统 |
| 独立于物理存储 | 不考虑数据的存储结构 |
| 易于理解 | 用户和设计人员都能理解 |
| 易于修改 | 便于调整和扩展 |
5.4.2 概念模型的基本概念
💡 概念模型是对现实世界的第一级抽象,用来描述"有什么东西"和"它们之间有什么关系"
| 概念 | 定义 | 举例 |
|---|---|---|
| 实体(Entity) | 客观存在并可相互区分的事物(可以是具体的,也可以是抽象的) | 学生张三、一门课程、一次借阅 |
| 属性(Attribute) | 实体或联系所具有的特性 | 学生的姓名、年龄、学号 |
| 码/键(Key) | 唯一标识实体的属性或属性组 | 学号、身份证号 |
| 域(Domain) | 某个属性的取值范围 | 年龄:1-150;性别:男/女 |
| 元组 | 表中的一行,对应一条记录 | (001, '张三', 20, '男') |
| 实体型(Entity Type) | 实体的结构描述 | 学生(学号, 姓名, 年龄, 性别) |
| 实体值 | 具体的实体实例 | ('001', '张三', 20, '男') |
| 实体集(Entity Set) | 同一类型实体的集合 | 所有学生的集合 |
| 联系(Relationship) | 实体之间的关联关系 | 学生"选修"课程 |
5.4.3 实体之间的联系类型
💡 联系描述的是实体之间的对应关系,分为三种类型
三种联系类型
联系类型对比表
| 类型 | 符号 | 含义 | 实例 |
|---|---|---|---|
| 一对一 | 1:1 | A中一个实体对应B中最多一个实体 | 班级-班长、国家-首都 |
| 一对多 | 1:N | A中一个实体对应B中多个实体 | 班级-学生、部门-员工 |
| 多对多 | M:N | A中多个实体对应B中多个实体 | 学生-课程、作者-图书 |
5.4.4 E-R图的表示方法(实体-联系图)
💡 E-R图是数据库概念设计中最常用的工具,也是设计人员与用户沟通的桥梁
E-R图的三个基本元素
| 图形 | 含义 | 说明 |
|---|---|---|
| 矩形 | 实体 | 框内写实体名 |
| 椭圆 | 属性 | 框内写属性名,主键加下划线 |
| 菱形 | 联系 | 框内写联系名 |
| 线段 | 连接 | 连接各个图形,标注联系类型 |
实例1:图书借阅管理系统E-R图
实例2:医院病房管理系统E-R图

5.4.5 概念设计的方法
flowchart TB
A[抽象数据<br>设计局部E-R图] --> B[合并局部E-R图<br>生成全局E-R图]
B --> C[优化全局E-R图]
style A fill:#FFB6C1
style B fill:#90EE90
style C fill:#87CEEB
局部E-R图合并的三种冲突
💡 当多个设计人员分别设计局部E-R图后,合并时可能产生冲突
| 冲突类型 | 说明 | 例子 |
|---|---|---|
| 属性冲突 | 同一属性的类型、取值范围不一致 | A组:年龄(INT);B组:年龄(VARCHAR) |
| 命名冲突 | 同一事物不同名,或不同事物同名 | A组:编号;B组:ID(指同一个属性) |
| 结构冲突 | 同一实体的属性组成不同,或联系类型不同 | A组:学生-课程是M:N;B组:认为是1:N |
💬 评论