数据库概念结构设计(E-R 模型)
·
一、概述
1. 基本定义
概念结构设计是数据库设计的核心阶段,核心目标是把用户需求抽象为独立于具体数据库管理系统(DBMS)的概念模型,最主流、最标准的实现工具就是E-R 模型(实体 - 联系模型)。
它不关心数据如何存储、用什么数据库,只专注描述现实世界中的事物、事物特征、事物之间的关系,是需求分析到逻辑设计、物理设计的桥梁。
2. 设计目标
- 准确、完整表达用户业务数据需求
- 结构清晰、无冗余、无歧义
- 易于转换为关系型数据库表结构
- 独立于硬件、操作系统、数据库软件
3. 设计步骤
- 明确需求 → 抽象实体
- 定义实体的属性与主键
- 分析实体间的联系与联系类型
- 绘制 E-R 图
- 优化 E-R 图(消除冗余、合并实体)
- 转换为关系模型(生成数据表)
二、E-R 模型三要素(核心)
1. 实体(Entity)
- 定义:现实世界中可独立存在、可相互区分的事物或抽象概念(人、物、事件、概念都可以是实体)。
- 表示:矩形,内部写实体名。
- 示例:学生、教师、课程、订单、商品、仓库。
2. 属性(Attribute)
- 定义:实体所具有的特征、性质,用于描述实体。
- 表示:椭圆形,用连线连接到所属实体。
- 分类:
- 主键属性:唯一标识一个实体,下划线标注。
- 普通属性:描述性特征。
- 派生属性:可由其他属性计算得出。
- 多值属性:一个实体可拥有多个值(如一个人的多个电话)。
3. 联系(Relationship)
- 定义:实体与实体之间的关联关系。
- 表示:菱形,内部写联系名,用连线连接相关实体。
- 联系的属性:描述联系本身的特征(不属于任何一方实体)。
三、实体间联系的三种类型

1. 一对一联系(1:1)
- 定义:实体 A 的一个实例,最多对应实体 B 的一个实例;反之亦然。
- 场景:系 ↔ 系主任、人 ↔ 身份证、班级 ↔ 班长
- 特点:关系唯一,无重复对应
2. 一对多联系(1:n)
- 定义:实体 A 的一个实例,可以对应实体 B 的多个实例;但实体 B 的一个实例,只能对应实体 A 的一个实例。
- 场景:班级 ↔ 学生、仓库 ↔ 商品、部门 ↔ 员工、教师 ↔ 学生
- 特点:最常见的联系类型
3. 多对多联系(m:n)
- 定义:实体 A 的多个实例,可以对应实体 B 的多个实例;反之亦然。
- 场景:学生 ↔ 课程、教师 ↔ 课程、商品 ↔ 订单、作者 ↔ 图书
- 特点:必须用中间表实现,不能直接存储在单张表中
四、E-R 图绘制规范
| 元素 | 图形 | 标注规则 |
|---|---|---|
| 实体 | 矩形 | 写实体名称 |
| 属性 | 椭圆形 | 主键加下划线 |
| 联系 | 菱形 | 写联系名称 |
| 联系类型 | 连线上标注 | 1:1 / 1:n / m:n |
绘制要点:
- 一个实体可以与多个实体产生不同联系
- 联系可以拥有自己的属性
- 主键必须唯一、稳定、无意义(如 ID)
- 避免冗余联系与冗余属性
五、E-R 模型设计案例(完整 + 可直接使用)
案例 1:1:1 联系 —— 系与系主任
实体:
- 系(系号,系名,办公地点)
- 主任(主任编号,姓名,年龄,学历)
联系:管理(1:1)联系属性:任职日期
SQL 实现
CREATE TABLE department(
dept_id INT PRIMARY KEY,
dept_name VARCHAR(30),
location VARCHAR(50)
);
CREATE TABLE director(
dir_id INT PRIMARY KEY,
name VARCHAR(20),
age INT,
education VARCHAR(30)
);
ALTER TABLE department
ADD COLUMN dir_id INT UNIQUE,
ADD FOREIGN KEY(dir_id) REFERENCES director(dir_id);
案例 2:1:n 联系 —— 仓库与商品
实体:
- 仓库(仓库号,地点,面积)
- 商品(商品号,商品名,价格,型号)
联系:存放(1:n)联系属性:数量
SQL 实现
CREATE TABLE warehouse(
w_id INT PRIMARY KEY,
location VARCHAR(50),
area FLOAT
);
CREATE TABLE product(
p_id INT PRIMARY KEY,
p_name VARCHAR(30),
price FLOAT,
w_id INT,
count INT,
FOREIGN KEY(w_id) REFERENCES warehouse(w_id)
);
案例 3:m:n 联系 —— 学生与课程
实体:
- 学生(学号,姓名,性别,年龄)
- 课程(课程号,课程名,学分)
联系:选课(m:n)联系属性:成绩
SQL 实现
CREATE TABLE student(
s_id INT PRIMARY KEY,
s_name VARCHAR(20),
sex CHAR(2),
age INT
);
CREATE TABLE course(
c_id INT PRIMARY KEY,
c_name VARCHAR(30),
credit INT
);
CREATE TABLE sc(
s_id INT,
c_id INT,
score FLOAT,
PRIMARY KEY(s_id,c_id),
FOREIGN KEY(s_id) REFERENCES student(s_id),
FOREIGN KEY(c_id) REFERENCES course(c_id)
);
六、E-R 模型转换为关系模型(规则总结)
-
一个实体 → 一张表实体名 = 表名,属性 = 字段,主键 = 表主键
-
1:1 联系在任意一方表中加入另一方主键作为外键,并加唯一约束。
-
1:n 联系在多的一方表中加入一的一方主键作为外键。
-
m:n 联系新建一张中间表,包含双方主键作为联合主键,同时存储联系属性。
-
联系的属性
- 1:1 / 1:n → 放入对应表中
- m:n → 放入中间表
七、E-R 模型优化原则
- 消除冗余属性:可推导、可计算的属性不存储
- 消除冗余联系:避免重复关联
- 合并同类实体:结构相同的实体可合并
- 保证主键唯一性
- 避免数据冗余:减少重复存储
- 保证业务完整性:不丢失需求语义
八、概念结构设计总结
- 概念结构设计 = E-R 模型设计
- E-R 三要素:实体、属性、联系
- 联系三类:1:1、1:n、m:n
- m:n 必须用中间表实现
- 最终目标:结构清晰、无冗余、易转表、满足需求
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)