数据库设计专题 · 下午试题二

软件设计师 · 案例分析 必答第 2 题(15 分) | 从 0 基础讲起:知识点 → 考点 → 真题 → 套路 | 覆盖 2020下 / 2021上 / 2021下 / 2022上 / 2023上
🎯 这题到底考什么(先建立大局观)

给你一段需求说明(谁和谁有关系、要存哪些信息),要你完成数据库设计的四个标准动作:

设问分值你要做的事本质
问题1 补 E-R 图5~7 分在图上补出实体之间缺的联系(菱形),标 1:1 / 1:n / m:n读懂关系
问题2 补关系模式3~4 分填出关系模式里空着的属性,标主键、外键转换+约束
问题3 键的分析2~4 分指出某关系的主键、外键键的知识
问题4 简答/改造3~7 分加新实体新联系、或问"存在什么问题怎么解决"规范化/变通
一句话:这题 = 阅读理解 + 画几个菱形 + 写几个属性名。套路极强,是下午最稳的送分题。
📖 导读:本页怎么用

① 30 秒科普:数据库到底在干嘛

没有数据库时,你把客户、订单、商品全塞进一张大 Excel:一行里既有客户信息又有商品信息。结果同一个客户买 100 次东西,他的电话就要重复存 100 遍——改一次电话得改 100 行,还容易漏改(这就是数据冗余 → 更新异常)。

有了数据库,把信息拆成若干张"关系表":客户一张表、商品一张表、订单一张表,表之间用编号(键)互相引用。改电话只改客户表那一行,其它表靠编号自动"关联"过去。

所以数据库设计的核心就两件事:(1) 把信息分到正确的表里;(2) 让表之间能靠键关联。下面所有名词都是为这两件事服务的。

② 知识点全景(小白先看这个)

2.1 三级模式:数据库的"三张皮"

模式是什么类比
外模式(用户模式/子模式)某个用户/应用能看到的那部分数据你手机银行 App 看到的界面
模式(概念模式)全体数据的逻辑结构(有哪几张表、每张表有啥列)——通常说的"数据库设计"就指它银行数据库整体设计蓝图
内模式(存储模式)数据在磁盘上怎么存(文件、索引、压缩)机房硬盘怎么摆

两级映射:外模式/模式映射(保证逻辑独立性)、模式/内模式映射(保证物理独立性)。

🎯 真题2021下 · 上午 51
采用三级模式结构的数据库系统中,如果对一个表创建聚簇索引,那么改变的是数据库的( )。
A. 外模式 B. 模式 C. 内模式 D. 用户模式
✅ 答案:C(内模式)
索引描述的是数据在磁盘上怎么存,属于内模式(存储模式)。外模式是"用户视图"、模式是"全体逻辑结构/基本表"。
牢记:基本表/视图关系 → 模式;索引、存储文件、簇集 → 内模式;用户看到的 → 外模式。

2.2 数据模型三要素(背)

数据结构(有哪些对象,是基础)+数据操作(增删改查,是核心)+完整性约束(数据要满足的规则)。

2.3 三种数据模型(发展顺序)

模型特点地位
概念模型面向用户、不依赖机器,用 E-R 图表达设计的第一步(概念设计)
逻辑模型关系模型(表)、层次模型(树)、网状模型(图)关系模型是当今主流(逻辑设计)
物理模型具体存储实现物理设计
🧭 设计的四个阶段(口诀:需求→概念→逻辑→物理): 需求分析(搞清要存啥)→ 概念结构设计(画 E-R 图,不管用什么数据库)→ 逻辑结构设计(转成关系模式 + 规范化)→ 物理结构设计(索引、存储)。 真题题干里的"概念模型设计→图2-1"就是概念设计,"逻辑结构设计→关系模式"就是逻辑设计。

2.4 关系模型的基本术语

术语含义别搞混
关系一张二维表—
元组表中的一行记录
属性表中的一列字段
域属性的取值范围如"性别∈{男,女}"
候选键能唯一标识一个元组、且不含多余属性的最小属性组有多个候选键时
主键从候选键里选一个当主键一个表只有 1 个主键
外键本表中的某属性,是另一张表的主键用来建立表间联系
主属性包含在任一候选键里的属性反之叫非主属性

③ E-R 图:三个形状 + 三种联系方式

3.1 只记三个形状

实体 矩形(如 客户、商品) 联系 菱形(如 购买、属于) 属性 椭圆(如 客户号、电话)

3.2 三种联系方式(联系两端标什么)

类型含义例子(口诀)怎么落地
1 : 1一个对一个一个班只有一个班长,一个班长只属于一个班任意一边加对方主键
1 : n一个对多个一个客户有多个订单,一个订单只属一个客户n 端(订单)加 1 端(客户)主键当外键
m : n多个对多个一个学生选多门课,一门课被多个学生选必须单独建一张"联系表",把双方主键都放进去
🔑 判断技巧(超好用):看联系两端的"1"字怎么念—— 口诀:一多之间 1:n,多多之间 m:n,一对一就 1:1。
📝 例题判断下列联系的基数类型:
① 一个班级有多名学生,一名学生只属于一个班级 → ?
② 一名教师可教多门课,一门课可由多名教师教 → ?
③ 一个公司只有一名法人,一名法人只担任一个公司法人 → ?
✅ ① 1:n ② m:n ③ 1:1
读法:两端都写"一个…只…"就 1:1;一端"一个"一端"多个"就 1:n;两端都"多个"就 m:n。
🎯 真题2020下 · 上午 51-52
某高校信息系统设计的分 E-R 图中,人力部门定义的职工实体有属性(职工号、姓名、性别、出生日期);教学部门定义的教师实体有属性(教师号、姓名、职称)。这种情况属于(51),在合并 E-R 图时(52)解决这一冲突。
(51) A. 属性冲突 B. 命名冲突 C. 结构冲突 D. 实体冲突
(52) A. 职工和教师实体保持各自属性不变 B. 职工实体中加入职称属性,删除教师实体 C. 直接将教师实体删除 D. 将教师实体所有属性并入职工实体,删除教师实体
✅ 答案:(51) C (52) B
同一对象(人)在一个分 E-R 图里被当"职工"、另一个里当"教师",属性还不一样 → 结构冲突。合并时以较大实体为主:把教师特有的"职称"并入职工,删掉教师实体。
三类冲突要背:属性冲突(类型/取值范围/单位不同)、命名冲突(异名同义、同名异义)、结构冲突(同对象一会儿是实体一会儿是属性、属性个数类型不同)。

④ E-R → 关系模式:转换规则(本节最重要)

这是问题2/问题3拿分的钥匙。ER 图 → 表,就三条规则:
图上的东西转换成说明
每个实体一张表(关系模式)实体的属性 = 表的列;实体标识属性 = 主键
1:n 联系不单独建表把"1"端的主键,塞进"n"端表里当外键
m:n 联系单独建一张表列 = 双方主键(合起来当主键)+ 联系自身的属性
1:1 联系不单独建表把任一方主键塞进另一方当外键(或两边合并)

4.1 看一个完整例子(客户-订单-商品)

需求:一个客户有多个订单;一个订单可含多个商品,一个商品可被多个订单买。

关系模式主键外键为什么
客户(客户号,姓名,电话)客户号——
订单(订单号,客户号,日期)订单号客户号→客户1:n,n端(订单)放1端(客户)主键
商品(商品号,名称,单价)商品号——
订单明细(订单号,商品号,数量)订单号+商品号订单号→订单;商品号→商品m:n 单独建表,双主键
⚠️ 小白最常踩的两个坑: 记忆:见"多对多"就建中介表;见"一对多"就搬外键。
📝 例题把下面 E-R 转成关系模式:
"学生"和"课程"是 m:n(选课,含"成绩");"班级"和"学生"是 1:n(一个班多名学生)。
✅ 学生(学号,姓名,班级号);课程(课程号,课程名);选课(学号,课程号,成绩)
班级号是 1:n 搬到 n 端(学生)的外键;选课是 m:n 单独建的表,双主键 + 联系自身属性(成绩)。
🎯 真题2022下 · 上午 51
E-R 模型向关系模型转换时,两个实体 E1 和 E2 之间的多对多联系 R 应该转换为一个独立的关系模式,且该关系模式的关键字由( )组成。
A. 联系 R 的属性 B. E1 或 E2 的关键字 C. E1 和 E2 的关键字 D. E1 和 E2 的关键字加上 R 的属性
✅ 答案:C(E1 和 E2 的关键字)
m:n 联系表的主键 = 双方主键的并(才能唯一确定一条联系记录);R 自己的属性(如"数量")只是普通属性,不进主键。记牢:关键字只由两实体关键字组成,别手滑选 D。
📝 例题某"选课"关系里有属性"成绩",它属于哪一部分?
✅ 属于联系自身的属性,跟着中介表(选课表)走,不作为主键。

⑤ 主键 / 外键 / 完整性约束

约束要求一句话
实体完整性主键非空且唯一每行都得能被主键认出来
参照完整性外键的值要么为空,要么等于被引用表里已存在的主键值不能引用一个不存在的对象
用户定义完整性业务规则,如"年龄 0~150""性别∈{男,女}"自己定的规矩
答题规范:标键时写成一串——
· 下划线表示主键(如 客户(客户号,姓名))
· 波浪线或标注表示外键,并写清"外键→引用哪张表"。
真题里常写:"主键:客户号;外键:所属部门号(引用部门关系)"。
📝 例题判断下面各违反哪种完整性约束:
① 学生表里插入了两条"学号"完全相同的记录 ② 选课表里"学号"填了 999,但学生表根本没有 999 号学生 ③ 年龄字段填成 −5
✅ ① 实体完整性(主键要唯一) ② 参照完整性(外键引用了不存在的对象) ③ 用户定义完整性(业务规则)

⑥ 规范化(范式)与"存在问题"

为什么要有范式? 因为如果表设计不好(属性乱塞一张表),会出现四大毛病:数据冗余、插入异常、删除异常、修改异常。范式就是"分表的标准",越高级分得越彻底。
范式要求(人话)通俗理解
1NF每个属性都不可再分(原子性)一个格子里别塞多个值
2NF1NF + 非主属性完全依赖主键(不存在部分依赖)别出现"部分属性只跟主键的一部分有关"
3NF2NF + 非主属性不传递依赖主键非主属性之间别再互相依赖(如 A→B→C)
BCNF3NF 的加强版:每个决定因素都包含候选键主属性之间也不能传递依赖
真题问法:"某关系存在什么问题?如何解决?"
答法几乎固定:
① 问题:存在数据冗余,以及插入异常、删除异常、修改异常。
② 解决:将关系模式进行分解(规范化),把"多值"的那部分拆出去独立成表,用主键关联。
例(2020下职员表把"家庭成员"混进来):因一个职员有多个家属,家属信息与职员是 m:n/1:n 的弱关系,应拆成 职员表 + 家属表,用职员号关联。
📝 例题关系 R(学号,姓名,课程号,成绩)里,一个学生选多门课。它最高是第几范式?
✅ 1NF(不是 2NF)
主键是(学号,课程号),但"姓名"只依赖"学号"这一部分 → 部分依赖,违反 2NF。解决:拆成 学生(学号,姓名)+ 选课(学号,课程号,成绩)。
🎯 真题2022下 · 上午 51-53
教师关系模式 T(教师号,姓名,部门号,岗位,联系地址,薪资),函数依赖集 F={教师号→(姓名,部门号,岗位,联系地址),岗位→薪资}。
关系模式 T 的主键为(52),函数依赖集 F(53)。
(52) A. 教师号,T 存在冗余以及插入异常和删除异常 B. 教师号,T 不存在…… C. (教师号,岗位),T 存在…… D. (教师号,岗位),T 不存在……
(53) A. 存在传递依赖,最高 1NF B. 存在传递依赖,最高 2NF C. 不存在传递依赖,最高 3NF D. 不存在传递依赖,最高 4NF
✅ 答案:(52) A (53) B
"教师号"能推出其余全部属性 → 主键是教师号(单个属性)。但存在 教师号→岗位→薪资 的传递依赖,所以最高只能到 2NF(去掉了部分依赖,但没消传递依赖)。
范式判断套路:先求主键 → 看有没有"部分依赖"(违反2NF) → 再看有没有"传递依赖"(违反3NF)。有传递依赖 = 有冗余 + 插入/删除异常。
🎯 真题2022上 · 上午 23
数据库中的视图是一个虚拟表。若设计师为 user 表创建一个 user1 视图,那么数据字典中保存的是( )。
A. user1 查询语句 B. user1 视图定义 C. user1 查询结果 D. 都不对
✅ 答案:B(视图定义)
视图是虚表,不真正存数据,数据字典里只存"视图是怎么定义出来的"(那条查询语句的定义)。查询结果不保存,用的时候才现算。

⑦ SQL 与关系代数(主要在上午题,下午偶尔)

7.1 五种基本关系代数运算

运算符号作用
选择σ(sigma)按条件选行(WHERE)
投影π(pi)选列(SELECT 的列)
并∪两个表的行合并
差−在 A 不在 B 的行
笛卡尔积×所有行两两组合
自然连接⋈按同名列拼接(考试最爱)

7.2 必背的 SQL 骨架

SELECT   列名              -- 投影:要哪些列
FROM     表名              -- 数据来源
WHERE    条件              -- 选择:选哪些行
GROUP BY 分组列  HAVING 分组条件   -- 分组统计
ORDER BY 列 [ASC|DESC]     -- 排序

-- 建表(会考主外键)
CREATE TABLE 选课(
  学号   CHAR(10) NOT NULL,
  课程号 CHAR(6)  NOT NULL,
  成绩   INT,
  PRIMARY KEY(学号, 课程号),
  FOREIGN KEY(学号) REFERENCES 学生(学号)
);

-- 授权
GRANT SELECT, UPDATE ON 表名 TO 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
内连接 vs 外连接:内连接只保留两表都匹配上的行;左外连接保留左表全部行,右表没匹配的补 NULL。真题问"哪个客户没有订单"就常用外连接或差集。
🎯 真题2022上 · 上午 24-25
给定关系 R(A,B,C,D) 和关系 S(A,D,E,F),若对这两个关系进行自然连接 R⋈S,结果的属性列有(24)个。
(24) A. 4 B. 5 C. 6 D. 8
✅ 答案:C(6 列)
自然连接列数 = 两边列数之和 − 同名(重复)列数。R 有 4 列、S 有 4 列,公共属性 A、D 共 2 列 → 4+4−2 = 6。(结果列为 A,B,C,D,E,F。)
注意:自然连接会自动去掉重复列;普通等值连接不去重,列数是 8。
🎯 真题2020下 · 上午 54-55
关系 R、S 做自然连接、左外连接、右外连接、完全外连接后,元组个数会怎样变化?
✅ 要点:内/自然连接只保留匹配上的元组;左外连接 = 匹配结果 + 左表未匹配的元组(右表补 NULL);右外连接 = 匹配结果 + 右表未匹配的元组;完全外连接 = 两边未匹配的都保留。
记忆:谁"外"就保谁。左外保左表全部,右外保右表全部,完全外两边都保。
🎯 真题2021上 · 上午 15
员工关系 E(工号、姓名、部门名、电话、住址)、商品关系 C(商品号、商品名、库存数)、销售关系 EC(工号、商品号、销售数、销售日期)。查询"销售部1"在 2020-11-11 销售"HUWEI Mate40"商品的员工工号、姓名、部门名及其销售的商品名、销售数,关系代数表达式为 π₁,₂,₃,₇,₈( σ₃='销售部1'(E) ⋈ σ₂='HUAWEI Mate40'(C) ⋈ π₁,₂,₄,₅(σ₄='2020-11-11'(EC)) )。
✅ 思路:三个表用"工号""商品号"串起来,最后 π 取需要的列。
三步走:
① σ 选行:E 里挑部门名='销售部1',C 里挑商品名='HUAWEI Mate40',EC 里挑日期='2020-11-11';
② ⋈ 连接:E ⋈ EC(按工号)、EC ⋈ C(按商品号);
③ π 取列:只留工号、姓名、部门名、商品名、销售数。
口诀先σ后⋈再π;π 的下标是"连接后结果集的列序号",要数清楚。
🎯 真题2021下 · 上午 56
数据库的安全机制中,通过提供( )供第三方开发人员调用进行数据更新,从而保证数据库的关系模式不被第三方所获取。
A. 触发器 B. 存储过程 C. 视图 D. 索引
✅ 答案:B(存储过程)
让第三方"只调过程、看不到表结构"→ 用存储过程封装数据更新操作。(视图是"隐藏部分行列"的虚表,触发器是自动执行的,索引是加速查询的。)

⑧ 通用四步法(拿到题就这么拆)

1
圈名词 → 找实体。需要建表"长期保存信息"的对象就是实体:客户、车辆、员工、供应商……(人/物/组织/单据)。能独立存在、有自己的标识 → 就是实体。
2
看每句"需求"→ 找联系。"一个 X 有多个 Y" → 1:n;"多个 X 对多个 Y" → m:n;"X 和 Y 一一对应" → 1:1。别漏"能当动词的关系"(购买/属于/包含/负责/供货)。
3
补关系模式:实体→表,属性列全;1:n 把 1 的主键搬到 n;m:n 建中介表。注意标下划线(主键)、外键引用。
4
查异常问"问题":若问"存在什么问题",答"冗余+插入/删除/修改异常",解决=分解规范化。
拆需求的关键句型(照抄就对):
题干原句翻译成
"每个 X 有多名 Y,每名 Y 只属于一个 X"X : Y = 1:n,把 X 主键放进 Y 表当外键
"一个 X 可以有多个 Y,一个 Y 也可以有多个 X"X : Y = m:n,建中介表
"X 号唯一标识 X 的每一个元组"→ X 的主键是 X 号
"一个 X 只有一名 Y,一名 Y 只负责一个 X"X : Y = 1:1

⑨ 真题精讲 5 套

下面每套都按考场原貌给出:题干原文(含问题)+ 图 2-1 原图(不完整 E-R 图)+ 官方答案及推导。 请先看图自己想"缺哪些联系/属性",再展开答案对照。
【2020 下半年 · M 集团职员管理】
【说明】M 集团拥有多个分公司,为便于对职员进行有效管理,决定构建信息平台。
【需求分析结果】
(1) 分公司关系模式:分公司编号、名称、经理号、联系地址、电话。分公司编号唯一标记每个元组;每个分公司各有一名经理负责管理;每个分公司设立多个业务部(研发部、财务部、采购部、交易部等)。
(2) 业务部关系模式:业务部编号、名称、地址、电话、分公司编号。业务部编号唯一标记每个元组;每个业务部各有一名主管负责管理;每个业务部有多名职员,每个职员只能来源于一个业务部。
(3) 职员关系模式:职员号、姓名、所属业务部编号、岗位、电话、家庭成员姓名、成员关系。岗位包括:经理、主管、研发员、业务员等。
【逻辑结构设计】(不完整)
分公司(分公司编号,名称, (a) ,联系地址)
业务部(业务部编号,名称, (b) ,电话)
职员(职员号,姓名,岗位, (c) ,电话,家庭成员姓名,成员关系)
问题1(4分)补充 4 个联系,完善图 2-1,联系类型为 1:1、1:n、m:n。
问题2(3分)将关系模式中的空 (a)~(c) 补全。
问题3(4分)分析分公司关系模式、业务部关系模式的主键和外键。
问题4(4分)假设每个职员有多名家属成员,职员关系模式存在什么问题?如何解决?
2020下 图2-1 实体联系图(待补全)
▲ 图 2-1 实体联系图(真题原图,不完整——联系 1/2/3/4 就是你要补的)
问题1:补 4 个联系(类型)
联系连接对象类型依据
联系1 管理分公司—经理(职员)1:1每个分公司各有一名经理
联系2 设有分公司—业务部1:n一个分公司多个业务部
联系3 负责业务部—主管(职员)1:1每个业务部一名主管
联系4 隶属业务部—职员1:n每个业务部多名职员,职员只属一个业务部
问题2:补空 (a) 经理号,电话 (b) 地址,分公司编号,主管号 (c) 所属业务部编号 问题3:主键/外键 分公司:主键 分公司编号;外键 经理号(引用职员)。
业务部:主键 业务部编号;外键 分公司编号、主管号(引用职员)。
问题4:职员表的问题与解决 问题:一个职员有多名家属,"家庭成员姓名、成员关系"塞在职员表里会造成数据冗余及插入/删除/修改异常。
解决:分解为——职员1(职员号,姓名,岗位,所属业务部编号,电话)+ 职员2(职员号,家庭成员姓名,成员关系)。
2020下 图2-1 答案标注(红字为补出的联系)
▲ 答案标注图(红字为补充的 4 个联系,蓝线为连接关系)
🔍 为什么 (a) 里有"电话"?题干说明分公司要记"联系地址和电话",但关系模式里只给了"联系地址",漏了电话 → 补上。 (a) 里的"经理号"来自 1:1 联系"管理":把经理(职员)的主键搬进分公司表当外键。
【2021 下半年 · 汽车维修管理系统】
【说明】某汽车维修公司为便于管理车辆维修情况,拟开发一套汽车维修管理系统。
【需求分析结果】
(1) 客户信息:客户号、客户名、客户性质、折扣率、联系人、联系电话。客户性质有个人或单位。客户号唯一标识客户关系中的每一个元组。
(2) 车辆信息:车牌号、车型、颜色、车辆类别。一个客户至少有一辆车,一辆车只属于一个客户。
(3) 员工信息:员工号、员工名、岗位、电话、家庭住址。员工号唯一标识每个元组。岗位有业务员、维修工、主管。业务员根据车辆的故障情况填写维修单。
(4) 部门信息:部门号、名称、主管、电话。部门号唯一确定每个元组。每个部门只有一名主管,但每个部门有多名员工,每名员工只属于一个部门。
(5) 维修单信息:维修单号、车牌号、维修内容、工时。维修单号唯一标识每个元组。一个维修工可以接多张维修单,但一张维修单只对应一个维修工。
【逻辑结构设计】(不完整)
客户(客户号,客户名, (a) ,折扣率,联系人,联系电话)
车辆(车牌号, (b) ,车型,颜色,车辆类别)
员工(员工号,员工名,岗位, (c) ,电话,家庭住址)
部门(部门号,名称,主管,电话)
维修单(维修单号, (d) ,维修内容,工时)
问题1(6分)补充 3 个联系,完善图 2-1。
问题2(4分)将关系模式中的空 (a)~(d) 补全。
问题3(2分)给出车辆关系和维修单关系的主键和外键。
问题4(3分)如果一张维修单涉及多项维修内容、需多个维修工处理,哪个联系类型会发生何种变化?如何解决?
2021下 图2-1 实体联系图(待补全)
▲ 图 2-1 实体联系图(真题原图,不完整)
问题1:补 3 个联系(6 分)
联系连接对象类型依据
联系1 拥有客户—车辆1:n一个客户多辆车,一辆车属一个客户
联系2 隶属部门—员工1:n一个部门多名员工,员工属一个部门
联系3 承接维修工(员工)—维修单1:n一个维修工多张单,一张单一个维修工
问题2:补空 (a) 客户性质(题干"客户信息包括…客户性质…"漏了) (b) 客户号(1:n,把客户主键放进车辆)  (c) 所属部门号(1:n,把部门主键放进员工) (d) 员工号(1:n,把维修工主键放进维修单) 问题3:车辆、维修单的主键/外键 车辆:主键 车牌号;外键 客户号。
维修单:主键 维修单号;外键 员工号(维修工)。
问题4:一张单含多项内容、需多个维修工 → 联系怎么变? 原来的"维修工—维修单"是 1:n;一旦"一个维修工可处理多张单,一张单也可由多个维修工处理",就变成 m:n。
解决:为"维修"这个 m:n 联系单独建一张联系表,如 维修明细(维修单号,员工号,…),把双方主键都作为主键/外键。
2021下 图2-1 答案标注
▲ 答案标注图(底部蓝字为官方的"联系类型变化+解决办法")
🔍 思路:先按题干把每个"一个…多个…只属于/只对应"翻译成 1:n;到问题4题干把条件改成"多对多",只需把对应联系的基数由 1:n 改 m:n,并说明建中介表——这就是"联系类型变化"题的固定套路。
【2021 上半年 · 社区蔬菜团购网站】
【说明】某社区蔬菜团购网站,为规范商品收发流程、便于查询客户订单情况,需开发一个信息系统。
【需求分析结果】
(1) 记录蔬菜供应商信息:供应商编号、地址和一个电话。
(2) 记录社区团购点信息:团购点编号、地址和一个电话。
(3) 记录客户信息:客户姓名和一个电话。客户可以在不同的社区团购点下订单,不直接与蔬菜供应商发生联系。
(4) 记录客户订单信息:订单编号、团购点编号、客户电话、订单内容和日期。
【逻辑结构设计】(不完整)
蔬菜供货商(供货商编号,地址,电话)
社区团购点(团购点编号,地址,电话)
供货(供货商编号, (a) )
客户(姓名,客户电话)
订单(订单编号,团购点编号,订单内容,日期, (b) )
问题1(6分)根据问题描述,补充图 2-1 的实体联系图。
问题2(4分)补充逻辑结构设计结果中的 (a)、(b) 两处空缺及完整性约束关系。
问题3(5分)若还兼有代收快递业务,增加新的"快递"实体,并给出客户实体和快递实体之间的"收取"联系,对图 2-1 进行补充。"快递"关系模式包括快递编号、客户电话和日期。
2021上 图2-1 实体联系图(待补全)
▲ 图 2-1 实体联系图(真题原图,不完整——"订单"这个菱形还没连上客户和团购点)
问题1:补 E-R 图 在图上补出:客户—(下单)—订单(1:n)、团购点—(接收)—订单(1:n) 等联系(按所给不完整图补齐缺失的联系及基数)。 问题2:补 (a)(b) 及完整性约束 (a) 团购点编号(供货联系里要有团购点?按题:供货商与团购点之间关系,补"团购点编号")
(b) 客户电话(订单里要关联客户,客户主键是电话)
约束:订单.团购点编号 参照 社区团购点(团购点编号);订单.客户电话 参照 客户(客户电话);供货.供货商编号 参照 蔬菜供货商(供货商编号)。
问题3:增加"快递"实体 新增实体 快递(快递编号,客户电话,日期);新增联系 收取:客户—(收取)—快递,类型 1:n(一个客户可收多个快递,一个快递属于一个客户)。客户电话作为快递的外键。
2021上 图2-1 答案标注
▲ 答案标注图(红字为补充的联系与实体)
🔍 提示:本题客户主键是"客户电话"(题里没给客户号),所以订单、快递都用"客户电话"当外键——主键选谁要看题干给了什么唯一标识。
【2022 上半年 · 疫苗接种管理系统】
【说明】为提高疫苗接种效率、为抗击疫情提供数据支撑,需开发一个信息系统。
【需求分析结果】
(1) 记录疫苗供应商信息:供应商名称、地址和一个电话。
(2) 记录接种医院信息:医院名称、地址和一个电话。
(3) 记录接种者个人信息:姓名、身份证号和一个电话。
(4) 记录接种者疫苗接种信息:接种医院信息、被接种者信息、疫苗供应商名称和接种日期。为提高免疫力,接种者可能需要进行多次疫苗接种(每天最多接种一次,每次都可以在全市任意一家医院进行接种)。
【逻辑结构设计】(不完整)
供应商(供应商名称、地址、电话)
医院(医院名称、地址、电话)
供货(供应商名称, (a) ,供货内容)
被接种者(姓名、身份证号、电话)
接种(接种者身份证号, (b) ,医院名称、供应商名称)
问题1(4分)根据问题描述,补充图 2-1 的实体联系图(不增加新的实体)。
问题2(4分)补充 (a)、(b) 两处空缺,并标注主键和外键完整性约束。
问题3(7分)若医院还兼有核酸检测业务(检测时可能需多次检测,每天最多一次,每次可在全市任意一家医院进行)。请在图 2-1 中增加"被检测者"实体及属性、医院与被检测者之间的"检测"联系及必要属性,并给出新增关系模式。被检测者实体包括姓名、身份证号、地址、电话;检测联系包括检测日期和检测结果。
2022上 图2-1 E-R图(待补全)
▲ 图 2-1 E-R 图(真题原图,"接种"菱形尚未与实体连全)
问题1:补 E-R 图(不加新实体,4分) 补出"接种"联系的连接关系:它是多元联系,连接 被接种者、医院、供应商 三个实体(因为"接种"关系模式里同时含 接种者身份证号、接种日期、医院名称、供应商名称);"供货"连接 供应商与医院(m:n,带"供货内容"属性)。 问题2:补 (a)(b) 及主外键 (a) 医院名称 (b) 接种日期
供货:主键(供应商名称,医院名称);外键 供应商名称→供应商、医院名称→医院。
接种:主键(接种者身份证号,接种时间/接种日期);外键 接种者身份证号→被接种者、医院名称→医院、供应商名称→供应商。
问题3:新增检测业务(7分) 新增关系模式:
 被检测者(身份证号,姓名,地址,电话)
 检测(被检测者身份证号,医院名称,检测日期,检测结果)
其中"检测"联系属性:检测日期、检测结果。
🔍 关键点:本套题里"接种/检测"都是"人被某医院服务"的多元/多对多关系——一个人可在多家医院多次接种,一家医院接待多人,所以要把它单独建成关系(把多方主键 + 业务属性合成)。同一套题的加需求问法(问题3)与 2023上"加门店"如出一辙:加实体 + 加联系 + 补一条关系模式。
【2023 上半年 · 汽车零件采购系统】
【说明】某新能源汽车公司为提升效率,需开发一个汽车零件采购系统。
【概念结构设计】
(1) 记录供应商信息:供应商的名称、地址和一个电话。
(2) 记录零件信息:零件的编码、名称和价格。
(3) 记录车型信息:车型的编号、名称和规格。
(4) 记录零件采购信息:某个车型的某种零件可以从多家供应商采购,某种零件也可以被多个车型采用,某家供应商也可以供应多种零件,还包括采购数量和采购日期。
【逻辑结构设计】(不完整)
供应商(名称,地址,电话)
零件(编码,名称,价格)
车型(编号,名称,规格)
采购(车型编号,供应商名称, (a) , (b) ,采购日期)
问题1(5分)根据描述,补充图 2-1 的实体联系图(不增加新的实体)。
问题2(3分)补充 (a)、(b) 两处空缺,并标注主键和外键完整性约束。
问题3(7分)新增需求:记录车型在全国门店的销售情况(门店信息包括门店编号、地址、电话,销售包括销售数量和销售日期)。
 (1) 在图 2-1 中体现门店信息及其车型销售情况、标明新增的实体和联系及其主要属性;
 (2) 给出新增加的关系模式,并标注主键和外键完整性约束。
2023上 图2-1 实体联系图(待补全)
▲ 图 2-1 实体联系图(真题原图,"采购"菱形尚未与三个实体相连)
问题1:补 E-R 图(不加新实体,5分) 三个实体 供应商、零件、车型 之间由"采购"这个三元联系连接:车型—(采购)—零件—(采购)—供应商,采购联系的基数为 m:n:p(多对多对多)。 问题2:补 (a)(b) (a) 零件编码 (b) 采购数量(采购日期题干已给出,缺的是零件和数量)
主键 = (车型编号,供应商名称,零件编码);外键:车型编号→车型、供应商名称→供应商、零件编码→零件。
问题3:新增门店销售需求(7分) (1) 图 2-1 中新增实体 门店(编号,地址,电话) 和联系 销售,连接 车型—门店,基数 m:n(一个车型可在多个门店销售,一个门店销售多个车型),联系属性含销售数量、销售日期。
(2) 新增关系模式:
 门店(编号,地址,电话)
 销售(车型编号,门店编号,销售数量,销售日期) 主键=车型编号+门店编号;外键 车型编号→车型、门店编号→门店。
🔍 三重多对多怎么破?只要一句"多个 X 对多个 Y 对多个 Z",就建一张"采购"表,把三方主键全放进去当联合主键——和 m:n 建中介表是同一招,只是升级成三方。联系自身的属性(采购数量/日期)也放进联系表。

⑩ 速查表 & 自测 & 口诀

10.1 一句话对照表

你看到你写下
要"长期保存信息的对象"实体(→ 一张表)
"一个 A 多个 B,一个 B 只属一个 A"1:n,A 的主键进 B 表当外键
"多个 A 多个 B"m:n,单独建 A-B 中介表
"A、B 一一对应"1:1
"X 号唯一标识每个元组"X 的主键 = X 号
"存在什么问题"冗余 + 插入/删除/修改异常 → 分解规范化
要加新业务/新实体加实体框 + 加联系菱形 + 补一条关系模式(标主外键)

10.2 三分钟自测(先自己答再点开)

Q1:一个学生选多门课,一门课被多个学生选,E-R 图里这条"选课"联系是什么类型?落地要怎么建表?
m:n单独建中介表 选课(学号,课程号,成绩),学号+课程号合起来当主键,各自又是外键。
Q2:"每个部门有一名经理,每名经理只管理一个部门"是什么类型?主键外键怎么放?
1:1任选一边把对方主键搬过去当外键即可,如 部门表加"经理号"当外键。
Q3:一张表里出现"职员号、姓名、家属姓名、家属关系",有什么问题?怎么办?
数据冗余 + 插入/删除/修改异常因为一个职员有多个家属。拆成 职员表(职员号,姓名,…)和 家属表(职员号,家属姓名,家属关系),用职员号关联。
🧠 送分口诀:
· 找实体:圈"要存信息的名词"(人/物/单据)。
· 判联系:一多 1:n,多多 m:n,一一 1:1。
· 转成表:实体成表,1:n 搬外键,m:n 建中介。
· 标约束:主键下划线、外键写"引用谁"。
· 问异常:冗余 + 三类异常 → 分解。
· 加需求:加框加菱形,补关系模式。
❌ 最易丢分的 6 个坑:
个人备考笔记 · 数据库设计专题(下午试题二)| 真题来源:2020下 / 2021上 / 2021下 / 2023上 软件设计师下午真题及参考答案 | 据真题 PDF 整理,仅供个人复习使用。
← DFD专题 | 软件工程专题 →