---
title: "04-数据库设计与E-R模型"
created: 2026-01-07
tags:
- 项目筑基
---
# 数据库设计与E-R模型
## **第五章:数据库设计**
> 💡 本章整合了概念模型、ER图、关系模型、转换规则等内容,形成完整的数据库设计知识体系
### **5.1 数据库设计概述**
#### **5.1.1 什么是数据库设计**
**定义**:数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求。
**核心问题**:如何设计一个结构合理、使用方便、效率高的数据库?
**设计目标**:
- 满足用户的信息需求
- 满足用户的处理需求
- 保证数据的完整性和安全性
- 具有良好的性能
#### **5.1.2 数据库设计的特点**
| **特点** | **说明** |
| --- | --- |
| **三分技术,七分管理,十二分基础数据** | 强调管理和基础数据的重要性 |
| **结构设计和行为设计相结合** | 既要设计数据结构,也要设计处理流程 |
| **多学科综合** | 涉及计算机、管理学、应用领域知识 |
#### **5.1.3 数据库设计方法**
**规范设计法的代表**:
- **新奥尔良法**:将数据库设计分为若干阶段和步骤
- **基于E-R模型的设计方法**:目前最常用的方法
- **基于3NF的设计方法**:基于规范化理论
![[image-ade3cbb0.png]]
#### **5.1.4 数据库设计的六个阶段**
![[image-314953ae.png]]
| **阶段** | **主要任务** | **产出物** |
| --- | --- | --- |
| **需求分析** | 调查用户需求,画数据流图(自顶向下) | 需求说明书、数据流图 |
| **概念设计** | 设计E-R图(实体联系模型) | E-R图(概念模型) |
| **逻辑设计** | 将E-R图转换为关系模式 | 表结构定义 |
| **物理设计** | 确定存储结构、索引策略 | 物理存储方案 |
| **实施** | 创建数据库、建表、导入数据 | 实际的数据库 |
| **运行维护** | 监控、备份、优化、调整 | 稳定运行的系统 |
### **5.2 数据建模:三个世界的转换**
> *💡 数据库设计就是把**现实世界**的事物,一步步抽象成**计算机**能存储的数据*
#### **5.2.1 三个世界**
![[image-05f43ace.png]]
![[image-db9fb12d.png]]
#### **5.2.2 两级抽象**
| **抽象级别** | **从...到...** | **模型类型** | **工具** |
| --- | --- | --- | --- |
| **第一级抽象** | 现实世界 → 信息世界 | 概念模型 | E-R图 |
| **第二级抽象** | 信息世界 → 计算机世界 | 数据模型 | 关系模式(表结构) |
> *📌 **重点**:概念模型是独立于DBMS的,数据模型是依赖于具体DBMS的*
### **5.3 需求分析**
#### **5.3.1 需求分析的任务**
**主要任务**:
1. **信息需求**:用户需要存储和管理哪些数据
2. **处理需求**:用户需要对数据进行哪些操作
3. **安全性需求**:数据的保密性和访问控制要求
4. **完整性需求**:数据的正确性和一致性要求
#### **5.3.2 需求分析的方法**
| **方法** | **说明** | **特点** |
| --- | --- | --- |
| **调查研究** | 访谈、问卷、观察 | 获取第一手资料 |
| **自顶向下** | 从全局到局部分解 | 结构清晰,不遗漏 |
| **自底向上** | 从具体到抽象归纳 | 细节准确 |
| **结构化分析(SA)** | 使用数据流图等工具 | 规范、直观 |
#### **5.3.3 数据流图(DFD)**
**数据流图的符号**:
| **符号** | **名称** | **含义** |
| --- | --- | --- |
| ○ 或 ◯ | 加工/处理 | 对数据的操作 |
| → | 数据流 | 数据的流向 |
| = 或 ▭ | 数据存储 | 数据保存的地方 |
| □ | 外部实体 | 系统外部的人或系统 |
**数据流图示例(图书借阅系统)**:
```mermaid
flowchart LR
Reader[读者] -->|借阅请求| P1((借阅处理))
P1 -->|借阅信息| D1[(借阅记录)]
P1 -->|更新库存| D2[(图书库存)]
D2 -->|库存信息| P1
P1 -->|借阅结果| Reader
```
#### **5.3.4 数据字典**
**定义**:数据字典是对数据流图中各元素的详细描述
**内容**:
| **内容** | **描述** |
| --- | --- |
| 数据项 | 最小数据单位(字段)的描述 |
| 数据结构 | 数据项的组合方式 |
| 数据流 | 数据的流动情况 |
| 数据存储 | 数据保存的方式 |
| 处理过程 | 对数据的操作描述 |
**数据项描述示例**:
```text
数据项名:学号
别名:学生编号、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)** | 实体之间的关联关系 | 学生"选修"课程 |
![[image-3f7f7150.png]]
#### **5.4.3 实体之间的联系类型**
> *💡 联系描述的是实体之间的**对应关系**,分为三种类型*
**三种联系类型**
![[image-366bdaf2.png]]
**联系类型对比表**
| **类型** | **符号** | **含义** | **实例** |
| --- | --- | --- | --- |
| 一对一 | 1:1 | A中一个实体对应B中最多一个实体 | 班级-班长、国家-首都 |
| 一对多 | 1:N | A中一个实体对应B中多个实体 | 班级-学生、部门-员工 |
| 多对多 | M:N | A中多个实体对应B中多个实体 | 学生-课程、作者-图书 |
#### **5.4.4 E-R图的表示方法(实体-联系图)**
> *💡 E-R图是数据库概念设计中**最常用**的工具,也是设计人员与用户**沟通的桥梁***
##### **E-R图的三个基本元素**
| **图形** | **含义** | **说明** |
| --- | --- | --- |
| **矩形** | 实体 | 框内写实体名 |
| **椭圆** | 属性 | 框内写属性名,主键加下划线 |
| **菱形** | 联系 | 框内写联系名 |
| **线段** | 连接 | 连接各个图形,标注联系类型 |
![[image-aff6b607.png]]
##### **实例1:图书借阅管理系统E-R图**
![[image-26c27f9a.png]]
##### **实例2:医院病房管理系统E-R图**
**![[image-1110803d.png]]**
#### **5.4.5 概念设计的方法**
```mermaid
flowchart TB
A[抽象数据
设计局部E-R图] --> B[合并局部E-R图
生成全局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 |
---
⬅️ [[03-三级模式与二级映射|三级模式与二级映射]] 🏠 [[00-数据库|00-数据库]] ➡️ [[05-逻辑设计与实施维护|逻辑设计与实施维护]]