【关系数据模型·深度复盘】15道经典题逐题拆解!
📚【关系数据模型·深度复盘】15道经典题逐题拆解!
前言:别再自己啃教材啦!这是关系数据库的核心考点合集,涵盖术语、操作、完整性、代数查询…
本文每题独立成块,带✅答案 + 💡解析 + 记忆技巧,适合打印/收藏/考前突击!
👇 开始刷题吧!
🔹 第1题:解释以下术语:关系、元组、属性、码、域、分量、关系模式。
✅ 答案:
-
关系(Relation):即二维表,由行和列组成,如 Student 表。
-
元组(Tuple):表中的一行,代表一条记录,如 (“S001”, “张三”, “计算机”)。
-
属性(Attribute):表中的一列,代表数据的特征,如“姓名”、“学号”。
-
码(Key):能唯一标识一个元组的属性或属性组,如“学号”是主码。
-
域(Domain):属性的取值范围,如“性别”的域是 {男, 女}。
-
分量(Component):元组中某个属性的具体值,如“张三”是“姓名”属性的分量。
-
关系模式(Relation Schema):关系的结构描述,如 Student(学号, 姓名, 专业名)。
💡 记忆口诀:
“关元属码域分模,表行列键范围值结构!”
→ 关系=表,元组=行,属性=列,码=主键,域=取值范围,分量=具体值,模式=结构定义。
🔹 第2题:说明关系数据模型的3个方面的含义。
✅ 答案:
关系数据模型包含三个核心方面:
-
数据结构 → 用二维表组织数据(最直观!)
-
数据操作 → 支持关系代数(选择、投影、连接等)和SQL语句
-
完整性约束 → 包括实体完整性、参照完整性、用户定义完整性
💡 类比理解:
就像盖房子:
-
结构 = 钢筋混凝土框架(二维表)
-
操作 = 装修、搬家具(增删改查)
-
约束 = 建筑规范(不能歪、不能塌)
🔹 第3题:解释关系数据库的“型”和“值”的含义。
✅ 答案:
-
“型”(Type / Schema):指关系的结构定义,即有哪些属性、类型是什么。
例:Student(学号:char(10), 姓名:varchar(20), 年龄:int) -
“值”(Value / Instance):指某一时刻关系中实际存储的数据内容。
例:("S001", "张三", 20), ("S002", "李四", 21)
💡 一句话区分:
“型”是模板,“值”是填进去的内容;“型”不变,“值”常变。
🔹 第4题:解释空值的含义。
✅ 答案:
空值(NULL) 表示“未知”、“不存在”或“不适用”的值,**不是0,也不是空字符串""**!
⚠️ 注意:
-
NULL ≠ 0 (数字零)
-
NULL ≠ "" (空字符串)
-
NULL 与任何值比较都为 UNKNOWN(三值逻辑)
📌 应用场景:
学生表中“备注”字段为空 → 表示暂无备注,而非“无此字段”。
🔹 第5题:候选码应满足哪两个性质?
✅ 答案:
候选码必须满足:
-
唯一性(Uniqueness):该属性组的值在关系中唯一标识每一个元组,不能有重复。
-
最小性(Minimality):该属性组中任意去掉一个属性后,就不再具有唯一性。
💡 举例:
若 (A,B) 是候选码,则 A 单独不能唯一标识,B 单独也不能,但合起来可以 → 满足最小性。
🔹 第6题:关系操作的特点是什么?关系数据模型的基本操作包括哪些内容?
✅ 答案:
特点:
-
集合操作方式:一次操作作用于多个元组(非单条记录)
-
操作对象和结果都是关系(封闭性)
-
基于数学理论(集合论、谓词逻辑),严谨可推导
基本操作(5种):
-
选择(σ) → 按条件筛选行
-
投影(π) → 按条件筛选列
-
并(∪) → 合并两个相容关系
-
差(−) → 从一个关系中减去另一个
-
笛卡尔积(×) → 所有组合
💡 补充:交、连接、除是衍生操作,可由基本操作组合得到。
🔹 第7题:关系代数的运算主要包含哪些内容?
✅ 答案:
关系代数运算分为两大类:
一、传统集合运算(需相容关系):
-
并(∪)、差(−)、交(∩)、笛卡尔积(×)
二、专门关系运算:
-
选择(σ)、投影(π)、连接(⋈)、除(÷)
💡 图解记忆:
关系代数
/ \
集合运算 专门运算
/ | \ / | \
∪ − × σ π ⋈ ÷
🔹 第8题:关系代数的选择运算和投影运算的含义是什么?各有什么特点?
✅ 答案:
选择运算(σ):
-
含义:从关系中选出满足给定条件的元组(行)
-
符号:σ_条件(R)
-
特点:水平分割,不改变属性个数,只减少行数
投影运算(π):
-
含义:从关系中选出指定的属性(列)
-
符号:π_属性列表(R)
-
特点:垂直分割,可能减少列数,自动去重(因为关系是集合)
💡 对比表格:
|
运算 |
操作方向 |
是否去重 |
示例 |
|---|---|---|---|
|
选择 σ |
行过滤 |
否 |
σ_年龄>20(Student) |
|
投影 π |
列提取 |
是 |
π_姓名,年龄(Student) |
🔹 第9题:两个关系进行并、交、差、连接的运算要求是什么?
✅ 答案:
并、交、差(集合运算):
→ 要求两个关系相容:
-
属性个数相同
-
对应属性来自同一域(类型兼容)
连接(⋈):
→ 不要求相容,但通常基于公共属性或指定条件进行匹配
→ 自然连接要求有同名属性且值相等
💡 重要提醒:
并/交/差是“横向合并”,连接是“纵向拼接”!
🔹 第10题:两个关系进行自然连接的要求是什么?等值连接与自然连接有什么区别和联系?
✅ 答案:
自然连接要求:
-
两个关系必须有同名属性
-
自动在这些同名属性上做等值比较
-
结果中去除重复列
等值连接 vs 自然连接:
|
特性 |
等值连接 |
自然连接 |
|---|---|---|
|
条件 |
显式指定 A=B |
隐式同名属性相等 |
|
列处理 |
保留所有列(含重复) |
自动去重列 |
|
灵活性 |
更灵活(可跨不同名属性) |
更简洁(依赖同名) |
💡 联系:自然连接是等值连接的特例 + 去重优化!
🔹 第11题:解释内连接和外连接的含义,并分别举例说明。
✅ 答案:
内连接(Inner Join):
-
只返回两边都有匹配的行
-
例:Student ⋈ SC → 只显示选了课的学生
外连接(Outer Join):
-
返回一边或两边所有行, unmatched 部分补 NULL
-
分类:
-
左外连接(LEFT JOIN)→ 保留左表所有行
-
右外连接(RIGHT JOIN)→ 保留右表所有行
-
全外连接(FULL JOIN)→ 保留所有行
-
💡 举例:
-- 左外连接:即使没选课,也显示学生信息
SELECT S.姓名, C.课程名
FROM Student S LEFT JOIN SC ON S.学号=SC.学号
🔹 第12题:说明数据完整性及其实现方法,试述3类关系数据完整性规则的含义。
✅ 答案:
数据完整性:
指数据的正确性、一致性、有效性,防止非法数据进入数据库。
三类完整性规则:
-
实体完整性(Entity Integrity)
→ 主码不能为 NULL,且唯一
→ 实现:PRIMARY KEY 约束 -
参照完整性(Referential Integrity)
→ 外码要么为 NULL,要么引用存在的主码值
→ 实现:FOREIGN KEY + ON DELETE CASCADE/SET NULL -
用户定义完整性(User-defined Integrity)
→ 用户自定义的业务规则(如年龄≥0,性别∈{男,女})
→ 实现:CHECK 约束、触发器、应用程序控制
💡 总结:
“实参用” → 实体、参照、用户定义,层层把关保数据质量!
🔹 第13题:有如下学生成绩数据库:
Student(学号, 姓名, 专业名, 性别, 出生时间, 总学分, 备注)
Course(课程号, 课程名, 开课学期, 学时, 学分)
StuCourse(学号, 课程号, 成绩)
试用关系代数表示如下查询:
(1) 求专业名为“计算机科学与技术”的学生学号与姓名;
✅ 答案:
π_学号,姓名 (σ_专业名='计算机科学与技术' (Student))
(2) 求开课学期为“2”的课程号与课程名;
✅ 答案:
π_课程号,课程名 (σ_开课学期='2' (Course))
(3) 求修读“计算机基础”的学生姓名。
✅ 答案:
π_姓名 (Student ⋈ StuCourse ⋈ σ_课程名='计算机基础'(Course))
或分步写:
T1 ← σ_课程名='计算机基础'(Course)
T2 ← T1 ⋈ StuCourse
T3 ← T2 ⋈ Student
Result ← π_姓名(T3)
💡 提示:多表连接时注意连接顺序和属性名冲突!
🔹 第14题:简要说明关系演算表达查询的特点。
✅ 答案:
关系演算是一种声明式查询语言,特点是:
-
非过程化:只需说明“要什么”,不用管“怎么找”
-
基于谓词逻辑:使用存在量词(∃)、全称量词(∀)表达条件
-
两种形式:
-
元组关系演算(TRC):变量代表元组
-
域关系演算(DRC):变量代表属性值
-
-
表达能力强:等价于关系代数,但更接近自然语言
💡 对比:
关系代数 = “怎么做”(操作步骤)
关系演算 = “要什么”(目标描述)
🔹 第15题:元组关系演算与域关系演算的区别是什么?
✅ 答案:
|
对比项 |
元组关系演算(TRC) |
域关系演算(DRC) |
|---|---|---|
|
变量类型 |
元组变量(t ∈ R) |
域变量(x ∈ Dom(A)) |
|
表达方式 |
{ t |
P(t) } |
|
适用场景 |
更适合复杂嵌套查询 |
更适合简单属性级查询 |
|
示例 |
{ t |
Student(t) ∧ t.专业='CS' } |
💡 核心区别:
TRC 操作的是“整行”,DRC 操作的是“每个格子”。
🎯 结语:搞定这15题,关系模型不再怕!
你已经完成了对《关系数据模型》核心知识点的系统复盘!🎉
无论是概念辨析、代数运算还是完整性约束,现在都能胸有成竹应对考试!
📌 下一步建议:
-
把本文打印出来,每天看一遍
-
自己动手画关系代数表达式
-
尝试用 SQL 实现这些查询
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)