南京理工大学《数据库系统基础教程》试题和答案,卓越考研特整理南京理工大学考研真题,为广大考生提供有效的信息支持。
数据库系统的世界(概述)
什么是数据库 数据库管理系统
2.数据库建模
数据模型
信息模型(概念模型):E/R模型,ODL模型等
基本数据模型:层次模型,网状模型,关系模型等
实体/联系图
属性attribute:
联系relationship:
对约束建模
有哪些重要的约束种类?
键key
单值single-value
参照完整性reference inte
关系数据模型
关系的等价表示法
改变列次序,不改变关系的含义。
改变行次序,不改变关系的含义。
从E/R图到关系设计
实体集到关系的转换
E/R联系到关系的转换
处理弱实体集 函数依赖
函数依赖是如何定义的?
若关系R的任意两个元组在属性A1、A2、…、An上一致(即有相同分量值),则这两个元组在属性B上也一致,则称属性A1A2…An函数决定B,或称B函数依赖于A1A2…An。 判断函数依赖的三种情形
如果任意两元组在属性A上一致,在B上也一致,则有A → B成立。 如果任意两元组在属性A上一致,在B上不一致,则A → B不成立。
如果任意两元组在属性A上不可能一致,则不管在B上是否一致,有A → B成立。 关系的键
如何用函数依赖定义键key?
定义:对于关系R,若属性集合{A1,A2,…,An}满足下列条件,则该属性集合是R的一个键key: 1.A1,A2,…,An函数决定R中所有其他属性。(超键)
2.{A1,A2,…,An}的任何真子集都不能函数决定R中所有其他属性。
(最小化) 超键
什么是超键super key?
键的超集superset of key。即包含键的属性集合。
可函数决定关系中所有属性的属性集合。
每个键都是超键。
一个关系的属性全集超键。 每个超键都是键吗?不是。 函数依赖规则
有哪些重要的函数依赖规则? 分解/合并(Splitting/combining)规则 平凡依赖(Trivial Dependance)规则 传递(Transitivy)规则 计算属性的闭包 如何计算属性的闭包?
给定函数依赖集S和属性集A={A1,A2,…An},如何计算A+? 1 将X初始化为{A1,A2,…,An},闭包最小集合。
2 遍历S中的每个函数依赖,对于每个依赖式:B1B2…Bm → C
如果B1、B2、…、Bm都在X中,而C不在X中,则把C加入X中。
3 重复第2步,直到遍历完S中所有函数依赖,而没有新属性能加入到X中。 4 最终属性集X即为属性集A在函数依赖集S下的闭包A+。
例3.28:P90 设有关系R(A, B, C, D, E, F)与函数依赖集
S:{AB → C,BC → AD,D → E,CF → B}
求:{A,B}+
解:X(1)={A,B}, 由AB → C,得:
X(2)={A,B,C}, 由BC → AD,得:
X(3)={A,B,C,D}, 由D → E,得: X(4)={A,B,C,D,E}={A,B}+ 属性闭包计算有何用途?
假设关系R上已有一个依赖集S,另有一个函数依赖A1A2…An → B,该依赖是否蕴含于S? 判断方法:
计算{A1,A2,…,An}+。
若B在{A1,A2,…An}+中,则函数依赖A1A2…An → B蕴含于S中。 若B不在{A1,A2,…An}+中,则函数依赖A1A2…An → B不蕴含于S中。 属性的闭包和键之间有何关系?
对于一个关系R,当且仅当A1,A2,…,An是R的超键时,{A1,A2,…,An}+是R的所有属性的集合。 3.6.1 已知关系模式R(A, B, C, D)有函数依赖AB → C, C → D, D → A (a)求蕴含于给定函数依赖的所有完全非平凡函数依赖。 (b)求R的所有键。
(c)求R的所有超键(不包括键)。 解:
(a)根据所有属性集合的闭包,计算所有可能的函数依赖。 {A}+={A} {B}+={B} {C}+={C, D, A}
C → AD
{D}+={D, A}
{A, B}+={A, B, C, D} AB → CD {A, C}+={A, C, D} AC → D
{A, D}+={A, D} {B, C}+={B, C, D, A} BC → AD {B, D}+={B, D, A, C} BD → AC {C, D}+={C, D, A}
CD → A {A, B, C}+={A, B, C, D} ABC → D {A, B, D}+={A, B, D, C}
ABD → C {A, C, D}+={A, C, D} {B, C, D}+={B, C, D, A}
BCD → A
(b)所有的键:{A, B}, {B, C}, {B, D}
(c)所有的超键(不包括键):{A,B,C}, {A,B,D}, {B,C,D}, {A,B,C,D}
关系数据库模式设计 BC范式
若关系模式R的每个分量均是不可再分的数据项,则R满足第一范式,又记作:R ∈ 1NF。 BC范式如何定义?
关系模式R满足BC范式,当且仅当若非平凡函数依赖A1A2…An → B1B2…Bm在关系R中成立,则{A1,A2,…,An}是R的超键。 关系R满足BC范式的两种情形
关系R中不存在非平凡函数依赖。(只有平凡函数依赖) 每个非平凡函数依赖的左面包含某个键(即左面是超键)。 关系R违背BC范式的唯一情形
关系R中至少存在一个非平凡函数依赖,其左面不是超键。 分解为BC范式
分解策略:消除违背BCNF的函数依赖 1 找一个违背BCNF的非平凡函数依赖A1A2…An → B1B2…Bm。 2 把关系R分解成两个关系: R1(A1,A2,…,An, B1,B2,…,Bm)。
R2(A1,A2,…,An, 所有其它属性),若不满足BC范式,则再分解。
例如:R(学号, 课号, 成绩, 系号, 系主任) 不满足BCNF。 1 非平凡函数依赖:学号 → 系号,系主任 成立 2 R分解为:R1(学号, 系号, 系主任)
R2(学号, 课号, 成绩)
3 非平凡函数依赖:系号 → 系主任 成立 4 R1继续分解为:R11(系号, 系主任)
R12(学号, 系号)
第三范式
关系模式R满足3NF,当且仅当若非平凡函数依赖A1A2…An → B在关系R中成立,则
{A1,A2,…,An}是R的超键,或者B是某个键的组成部份(键属性)。
结论:一个关系模式总可以分解为满足3NF的模式,且所有的函数依赖都可得到保持。 第二范式 第二范式(2NF):
要求每个非键属性依赖于键的整体,而不是键的部分属性,即不允许有非平凡函数依赖的右面
是非键属性,而左面是某个键的真子集。
满足2NF的几种情形:
不存在非平凡函数依赖。
存在非平凡函数依赖,且其右面是某个键的组成部分(键属性)。
存在非平凡函数依赖,且其右面是非键属性,则其左面要么是超键,要么包含非键属性。 例如:关系模式R(A, B, C, D)有函数依赖AB → C, C → D, D → A 找出所有违背BCNF的函数依赖。 必要时,分解为几个满足BCNF的关系 找出所有违背3NF的函数依赖。 解:
所有的键:{A, B}, {B, C}, {B, D}
违背BCNF的函数依赖:C → AD, D → A 分解:R1(A,C,D), R2(B,C) R11(A,D), R12(C,D) 函数依赖AB → C 不保持 R满足3NF 关系模型中的运算 投影 选择 笛卡尔积 例4.5:p125
改名
改名是什么运算?
把一个关系R改名为关系S,且属性也按次序改名为A1A2…An,表示为ρS (A1, A2,…,An) (R),若
仅关系改名为S而属性不改名,则表示为ρS (R)
例:销售员Salesman (empid, idno, name, gender, phone, deptid)
数据库语言SQL SQL简单查询 投影 选择 多关系查询 乘积和连接 子查询 练习:
求选修了'C1'课的学生姓名。(用IN表示) 求'C1'课成绩最好的学生姓名。 求既选'C1'课,又选'C2'课的学生姓名。 求没选'C1'课的学生姓名。 聚合运算 分组
Group By子句如何构成?
根据一列或几列的值把元组分成若干组,有相同分组值的元组作为一组,每个组再分别进行聚合运
算。 Having子句
Having子句条件表示什么?
在分组聚合之后按某条件过滤分组,使用Having子句确定条件。 视图
什么是视图view?
依据一条SELECT语句产生的一个命名的“虚关系”或“虚表”。视图的数据均来自基本表,并不实际存储。一个定义好的视图可看作基本表,用于定义新的视图,或对之进行查询甚至更新。 一个数据库可定义多个视图。视图的名称不能与已有的表名冲突。视图是数据库模式的一部分。 为何需要视图? 简化计算。
不同用户关心同一表中的不同属性。
提高数据的安全性。
创建视图 如何创建视图?
CREATE VIEW [ owner .]view-name [( column-name , ... )] AS select-without-order-by [with check option] 例如:
CREATE View orderamount As
Select salesorder.orderno, signdate, empid, custid, Sum(quantity) as qty, Sum(singlecost*quantity) as amount
From dba.salesitem, dba.salesorder
Where salesorder.orderno = salesitem.orderno Group by salesorder.orderno, signdate, empid, custid 产生一个虚关系:
orderamount(orderno, signdate, empid, custid, qty, amount)
视图查询 如何查询视图?
对视图的查询与表查询遵循相同的语法。
例:计算销售金额最高的订单号、签单日期及销售金额。 Select orderno, signdate, amount From orderamount
Where amount = (Select Max(amount) From orderamount) 对视图的查询将由系统转换为对基本表的查询。 SQL约束和触发器 SQL中的键
键key是最重要的约束。每个表都必须确定自己的键。
每个表都可能有多个属性集可作为键,称为“候选键candicate key”。 一个表只能确定一个主键(Primary Key)。 若某个属性说明为Unique,则它是一个候选键。 主键和Unique属性之间有何区别和联系?
一个表有且仅有一个主键;而Unique属性可有多个或没有。 主键可以是多属性,而Unique只能说明单个属性。 若主键是单个属性,则该属性隐含为Unique。 若主键是多个属性,则每个属性都不可能为Unique。 实施主键约束
什么操作会导致违背键约束?
insert和update可能违背该表的键约束。
SQL实施主键约束即是在insert和update时检验键值,避免空值或重复键值。 参照完整性和外键
SQL中依靠外键保证参照完整性。外键定义时要注意区分参照关系和被参照关系。 说明外键约束
是否可定义一个表参照自己? 可以。
例如:salesman(empid, idno, name, managerid, deptid, …) 外键是否可取NULL值? 可以。 SQL系统概况 SQL事务
事务transaction是什么概念? 事务有何特性?ACID。 如何控制事务运行?
事务的一次运行只能是下面两个结果之一: Commit提交;或Rollback退回
Commit指令提交当前事务,完成对数据的更新。
Rollback指令退回当前事务,并取消当前事务对数据已做的更新。 Commit和Rollback都结束当前事务,并自动启动下一个事务。 在多用户多任务环境中,并发事务可能引起哪些问题? 同时更新同一数据 脏读dirty read
不可重复读non-repeatable read 虚行(幻象元组)phantom rows “写锁”write lock是什么概念?
某数据被一个事务修改,在该事务提交或退回之前,其他事务不能修改或删除此数据。 脏读是什么含义?
当事务A修改某数据后,在提交或退回前,该数据被事务B读取,若事务A退回,则事务B读取的数据为“脏数据”,即事务B发生脏读。 不可重读non-repeatable read是什么含义?
事务A先读某行数据,随后事务B修改update或删除delete该行数据并提交,事务A重复再读该行数据,结果就不一致。
虚行phantom rows是什么含义?
事务A按某条件C查询一组数据,随后事务B增加insert满足条件C的数据,或修改update条件C相关的数据,使得事务A按原条件C再次查询的结果不一致。也称为“幻象”元组。 “读锁”read lock是什么概念?
当某数据被一个事务处理时,其他事务限制读该数据。 Grant, Revoke指令有何用途?