一、概述

1. 基本定义

概念结构设计是数据库设计的核心阶段,核心目标是把用户需求抽象为独立于具体数据库管理系统(DBMS)的概念模型,最主流、最标准的实现工具就是E-R 模型(实体 - 联系模型)

它不关心数据如何存储、用什么数据库,只专注描述现实世界中的事物、事物特征、事物之间的关系,是需求分析到逻辑设计、物理设计的桥梁。

2. 设计目标

  • 准确、完整表达用户业务数据需求
  • 结构清晰、无冗余、无歧义
  • 易于转换为关系型数据库表结构
  • 独立于硬件、操作系统、数据库软件

3. 设计步骤

  1. 明确需求 → 抽象实体
  2. 定义实体的属性主键
  3. 分析实体间的联系与联系类型
  4. 绘制 E-R 图
  5. 优化 E-R 图(消除冗余、合并实体)
  6. 转换为关系模型(生成数据表)

二、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. 一个实体 → 一张表实体名 = 表名,属性 = 字段,主键 = 表主键

  2. 1:1 联系在任意一方表中加入另一方主键作为外键,并加唯一约束。

  3. 1:n 联系多的一方表中加入一的一方主键作为外键。

  4. m:n 联系新建一张中间表,包含双方主键作为联合主键,同时存储联系属性。

  5. 联系的属性

    • 1:1 / 1:n → 放入对应表中
    • m:n → 放入中间表

七、E-R 模型优化原则

  1. 消除冗余属性:可推导、可计算的属性不存储
  2. 消除冗余联系:避免重复关联
  3. 合并同类实体:结构相同的实体可合并
  4. 保证主键唯一性
  5. 避免数据冗余:减少重复存储
  6. 保证业务完整性:不丢失需求语义

八、概念结构设计总结

  1. 概念结构设计 = E-R 模型设计
  2. E-R 三要素:实体、属性、联系
  3. 联系三类:1:1、1:n、m:n
  4. m:n 必须用中间表实现
  5. 最终目标:结构清晰、无冗余、易转表、满足需求

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐