--- 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-逻辑设计与实施维护|逻辑设计与实施维护]]