赞
踩
永久存储,可组织,可共享
有较小的冗余度,较高的数据独立性,易扩展性
位于用户和操作系统之间,是数据管理软件
包括数据库,数据库管理系统,应用程序,数据库管理员,是一个系统
人工:不共享,不独立,不保存
文件:可保存,共享差,冗余大,独立性差
数据库管理系统:共享高,冗余低,独立性高,易扩展
(废话)
物理独立性:应用程序与数据的物理存储独立
逻辑独立性:应用程序与数据库逻辑结果独立
数据由数据库管理系统统一管理和控制
概念模型(信息模型),逻辑模型和物理模型。
概念模型:E-R图,按用户观点对信息和数据建模,就是对数据库设计。
基本概念:实体,属性,码,实体型(就是类),实体集(实体的集合),联系
逻辑模型和物理模型:网状模型,层次模型,关系模型
概念模型:层次模型,网状模型,关系模型
物理模型:对数据最底层的抽象。描述数据在系统内部的表示方法和存取方法;磁盘或磁带上的存储和存取方法
关系是菱形,属性是椭圆,实体是长方形
没啥说的,会画就行
网状模型:树
层次模型:图
关系模型:存在数据库的表
先区分一下模式和模型(别问为什么会区分这玩意):1个数据库下,可以有多个模式。 1个模式下,可以有0个或多个表 。简而言之,模式是对整个数据库的定义,因此它包括表、视图、存储过程、索引、主键和外键等。
可以把模式类比成文件夹,在他里面的东西是文件。
关系:一张表
元组:行,也就是记录
属性:列,数据库字段
码:某个熟悉组
域:一组具有相同数据类型的值的集合,就是属性中的几个
(有同学纠正:是属性的取值范围,即定义了属性可以包含哪些值。域包括了数据类型和约束,确保属性的值符合预期的规范。)
分量:一行(元组)中的一个属性
外模式(子模式,用户模式):数据库用户看得到的局部数据的逻辑结构和特征的描述,是数据视图,可以有多个。
模式(逻辑模式):逻辑模式,数据库中全体(所有用户的)公共数据的逻辑结构和特真的描述。一个数据库只有一个。
内模式(存储模式):数据物理结构和存储方式的描述,是数据在数据库内部存储的组织方式,用户看不到。一个数据库只有一个。
内模式-存储方式(顺序存储,按照B树结构存储,按hash方法存储)
外模式/模式映像:保证数据和程序的逻辑独立性。
模式/内模式映像:保证数据和程序的物理独立性。
关系模型:对关系的描述
什么是关系:关系就是一张表,一张二维表
R是关系名,U是所有的属性名,D是域,DOM是属性和域的映射,F是属性之间的依赖关系
关系代数运算符:
集合运算符:并,交,差,笛卡尔积 X
专门的关系运算符:投影Π(保留列并取消重复行),选择σ,除÷(类比整除),连接 ⋈
(之前写过一个填空题)关系代数五种基本运算:并(U)、差(—)、投影、选择、笛卡尔积(X)。交、连接、除等为附加操作
等值连接:
自然连接:把同等属性进行等值连接并去掉重复的同等属性列(同样的属性名只保存一个)。补充一个悬浮元组,就是在进行自然连接时候被舍弃的元组。在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉
外连接:把悬浮元组也保留在结果,其他属性上写NULL
左外连接:保留左边的悬浮元组
右外连接:保留右边的悬浮元组
实体完整性:主键唯一且非空
参照完整性:外键要么为空要么对应另一表主键
用户自定义完整性:针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求
insert into table (… ,…, …,);
DELETE FROM table_name
WHERE some_column=some_value;
UPDATE table_name
SET column1=value1,column2=value2,…
WHERE some_column=some_value;
CREATE VIEW view_name AS
SELECT column1, column2…
FROM table_name
WHERE [condition];
DROP VIEW view_name
1.创建索引
CREATE INDEX index_name
ON table_name (column_name)
2.唯一索引
CREATE unique INDEX index_name
ON table_name (column_name)
CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt
需求分析:熟悉需求,数据字典,用户需求规格说明书,系统边界
概念结构设计:E-R图
逻辑结构设计:E-R图转化成关系模型(数据库里的表,还没用sql执行),也可能是非关系模型
物理结构模型:设计关系,索引等物理存储结构,关系模型选择存取方法
数据库实现:执行sql
数据库运行和维护
截一段别人的
来源:https://blog.csdn.net/weixin_45591044/article/details/106350680
数据冗余,插入异常,删除异常,更新异常
平凡函数依赖:X能推出Y但Y不是X的子集
非平凡函数依赖:X能推出Y且Y是X的子集
完全函数依赖(F):X->Y,X的任意一个子集都推不出Y,则Y完全依赖于X
部分函数依赖(P):Y不完全依赖于X
怎么选出候选码
只出现在左边的一定是,只出现在右边的一定不是
左右都有的可能是
左右都没有的一定是
然后在一定是候选码的基础上加上可能是的里面的属性,如果能推出所有码那么这一组就是候选码
比如ABC,AB一定是候选码
超码:候选码基础上加任意属性,候选码是最小的超码
主码:候选码中任意挑一个
主属性:所有在候选码的属性
非主属性:主属性的不急
全码:所有属性都是著名
越高的范式冗余越小
一级范式1NF:属性(字段值)不可再分,已经最小了
二级范式2NF:确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(依赖)(主要针对联合主键而言),可以间接依赖。一个表只能表示一种事物的属性(非主属性对主键完全依赖)。
三级范式3NF:2NF基础上不存在传递依赖
BCNF:消除所有属性对候选键的传递依赖和部分依赖。相对于BCNF,3NF允许存在主属性对候选码的传递依赖和部分依赖
(去冗余,比如书号->书名,(书名,作者)->书号,这个就不满足,这有传递依赖)。
公理就记两个:
X⊆Y,X->Y;
X->Y,X->Z,得出X->YZ
无损链接
保存函数依赖
1-1:和1-n差不多,但是被写入的那个表任意
1-n:实体只有A,B。1是A表,n是B表 A表主键写入B,AB关系属性写入B
n-m:关系单独拿出来作为一个实体,包含关系的属性,关系连接两表的主属性
就是把sql语句放到编程语言中,比如java
处理过程:
预编译转换成函数调用
诸语言编译
变成主语言所编译的类型
查询优化四阶段:查询分析,查询检查,查询优化,查询执行
查询优化包括物理优化和代数优化(又滑数)
关系代数语法树,优化树
选择尽量先,然后头投影和选择一起
把投影和前后的双目运算连接
原子性,一致性,隔离性,持久性
事务故障,系统故障,介质故障(就是硬件损坏了),计算机病毒
数据转储,日志文件
事务异常终止,就撤销之前所有操作
系统故障恢复,没执行的undo(撤销),丢失的redo(重做)
介质故障就重装数据库
转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据称为后备副本。
转储又分为静态转储和动态转储:静态转储必须等待正在运行的用户事务结束才能进行,转储和用户事务不可并发执行;动态转储是指转储期间允许对数据库进行存取或修改,即转储和用户事务可以并发执行。
也可分为海量转储和增量转储:海量转储即每次转储全部数据库,增量转储即每次只转储上一次转储后更新的数据。
日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式并不完全一样,主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件
对以记录为单位的日志文件,日志文件中需要登记的内容包括:
各个事务的开始(BEGIN TRANSACTION)标记
各个事务的结束(COMMIT或ROLLBACK)标记
各个事务的所有更新操作
以上每一条内容记为一个日志记录(log record)
每个日志记录的内容主要包括:
事务标识(标明是哪个事务)
操作的类型(插入、删除或修改)
操作对象(记录内部标识)
更新前数据的旧值(对插入操作而言,此项为空值)
更新后数据的新值(对删除操作而言,此项为空值)
对以数据块为单位的日志文件,日志记录的内容包括事务标识和被更新的数据块。由于将更新前的整个块和更新后的整个块都放入日志文件中,操作的类型和操作对象等信息就不必放入日志记录中了。
日志文件用于事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复
具体作用如下:
为保证数据库是可恢复的,登记日志文件时必须遵循两条规则:
(1) 登记的次序严格按并发事务执行的时间次序
(2) 必须先写日志文件,后写数据库
如果先写了数据库修改,但是没有登记这个日志,那么中途运行故障就无法恢复这个修改了。
REDO:重做,正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作
UDNO:撤销,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,原本是删就加,原本是加就删
COMMIT:提交,将事务中所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束
ROLLBACK:回滚,事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成操作全部撤销,回滚到事务开始时的状态
事务故障的修复就是要撤销事务。即清除该事务对数据库的所有修改,使得这个事务像根本没有启动过一样。
(1)反向扫描日志文件(即从最后向前扫描日志文件),查找该事务的更新操作
(2)对该事务的更新操作执行逆操作。(来得及或者未来得及写入数据库都没关系)
(3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
(4)如此继续,直到读到该事务的开始标记
(1)正向扫描日志文件,找出在故障发生前已经提交的事务(这些事务既有BEGIN TRANSACTION记录,也有COMMIT记录),将其事务标记记入REDO队列;同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无相应的COMMIT记录),将其事务标记记入UNDO队列
(2)对撤销队列中的各个事务执行UNDO操作
(3)对重做队列中的各个事务执行REDO操作
为什么要REDO?考虑已提交事务对数据库的更新部分可能还留在缓冲区没来得及写入数据库(磁盘)。
在故障发生时还未完成的事务需要撤销,在检查点和故障点之间完成的事务需要重做,因为它们对数据库所做的修改在故障发生时可能还在缓冲区中
左边不用管,中间重做,右边撤销。
检查点技术是用在系统故障的恢复(与介质故障无关),目的是数据库运行突然中断,缓存中可能存在没有写数据库的数据丢失了,数据库的状态不可知,因此只有在数据库恢复时读取日志全部重做和撤消所有的事务,时间太长,设立检查点,定时地写盘,恢复时只需要从检查点开始。
但当你重装后备复本后,系统不存在缓存的问题,只是把日志中记录的已经提交的事务重做一遍就好了,如果是动态备份,则需要撤消未完成的事务(针对转储过程中的哪些未完成)。这一点上是和系统故障的恢复一样。与检查点无关了,不用管检查点。
丢失修改:修改没生效,可能是多个事物读入同一数据并修改(被覆盖了)
读脏数据:读到的数据不是现在数据库存的,后一事务读到的数据与数据库中的数据不一致
不可重复读:希望与第一次读取的是相同的值但是却不是,因为修改或删除数据
幻读:因为新增数据
排他锁,写锁:X
共享锁,读锁:S
排它锁(写锁,X锁):若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁前不能再读取和修改A
共享锁(读锁,S锁):若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改
一级:对写操作加写锁,直到事务结束,解决丢失修改
二级:对读操作加读锁,读完放锁,解决读脏数据
三级:对读操作加读锁,指导事务结束,解决不可重复读
参考操作系统的饥饿和死锁
活锁即一个事务可能永远等待(系统总是先批准其他事务的锁请求),可以采用先来先服务的策略解决。
死锁即两个事务互相申请对方锁住的资源导致两个事务永远不能结束。
(1) 一次性封锁法:一次性封锁发要求每个事务必须一次将所有要使用的数据全部加锁
缺点:势必扩大封锁的范围,从而降低了系统的并发度;
(2) 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
缺点:难以事先确定封锁顺序
(1) 超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁;
缺点:可能误判死锁,事务因为其他原因使等待时间超过时限;若时限设置得太长,死锁发生后不能及时发现
(2) 等待图法:并发控制子系统周期性地生成事务等待图,并进行检测,如果发现图中存在回路,则发生了死锁。
如果检测到死锁,一般采用的方法是选择一个处理死锁代价较小的事务,将其撤销,释放此事务持有的所有的锁,之后对撤销的事务所执行的数据修改操作必须加以恢复。
意向锁的含义是如果对一个节点加意向锁,则说明该节点的下层节点正在被加锁;对任一节点加锁时,必须先对它的上层节点加意向锁。如:对任一元组加锁,必须先对它的数据库和关系加意向锁。
意向锁分为三种:意向共享锁(IS)、意向排他锁(IX)、共享意向排他锁(SIX)。
(1)意向共享锁(IS)
如果对一个数据对象加IS锁,表示它的后裔节点拟(意向)加S锁。例如事务T1要对R1中某个元组加S锁,则首先对关系R1和数据库加IS锁。
(2)意向排他锁(IX)
如果对一个数据对象加IX锁,表示它的后裔节点拟加X锁。例如事务T1要对R1中某个元组加X锁,则首先要对关系R1和数据库加IX锁。
(3)共享意向排他锁(SIX)
如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁。例如对某个表加SIX锁,则表示该事务要读整个表,同时会更新个别元组在具有意向锁的多粒度封锁方法中,任意事务T要对一个数据对象加锁,必须先对它的上层节点加意向锁。申请封锁时应该按自上而下的次序进行,释放封锁时则应该按自下而上的次序进行。
A,IX和IX的可共存的,B是加上IX锁,C是对的,D是应对其所有上级节点都要加IS锁
多个事务的并发执行结果与这些事务按照某个顺序顺次执行的结果相同。可串行性(Serializability)是并发事务正确调度的准则。
冲突操作是指不同的事务对同一个数据的读写操作和写写操作:
Ri (x)与Wj(x) /* 事务Ti读x,Tj写x,其中i≠j*/
Wi(x)与Wj(x) /* 事务Ti写x,Tj写x,其中i≠j*/
如果一个调度Sc在保证冲突操作次序不变的情况下通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,且Sc’是串行的,则称调度Sc是冲突可串行化调度
冲突可串行化带哦都是可串行化调度的充分条件,not必要
调度S的优先图有环,调度S是非冲突可串行化的,没环是冲突可串行化的
冲突可调度:
冲突可调度
非冲突可调度
封锁协议(Locking Protocol)即对数据对象加锁时约定的一些规则,如何时申请封锁、持锁时间、何时释放锁等。两段锁协议是最常用的一种封锁协议,使用两段锁协议产生的是可串行化调度(充分条件)。
两段锁协议是指每个事务必须分两个阶段对数据项加锁和解锁
(1) 在对任何数据进行读、写操作之前,首先要申请并获取对该数据的封锁
(2) 在释放一个封锁之后,事务不得再申请和获得任何其他封锁
简单来说,获得封锁(扩展阶段)和释放锁(收缩阶段)必须是连续的
例:
事务T1遵守两段锁协议,其封锁序列是:
Slock A Slock B Xlock C Unlock B Unlock A Unlock C;
l← ~~~~~~ 扩展阶段 ~~~~~~ →l l← ~~~~~~~~ 收缩阶段 ~~~~~~~~~~~ →l
事务T2不遵守两段锁协议,其封锁序列是:
Slock A Unlock A Slock B Xlock C Unlock C Unlock B
遵守两段锁协议的事务任然可能发生死锁(区别一次封锁法)
封锁粒度就是封锁对象的大小
封锁的粒度越大,数据库能够封锁的数据单元就越少,并发就越小,系统开销越小
封锁的粒度越小,数据库能够封锁的数据单元就越多,并发就越大,系统开销越大
例:
多粒度封锁:一个系统中同时支持多种粒度供不同事务选择
显式封锁:直接加到数据对象上的
隐式封锁:间接加到数据对象上的,上级加锁
不想写了
数据库(Database,简称DB)是长期储存在计算机内、有组织(不仅存数据及联系)的、可共享的大量数据的集合。
数据库
数据库管理系统(及其开发工具)
应用系统
数据库管理员
数据结构化
数据的共享性高,冗余度低,易扩充
数据独立性高
数据由DBMS统一管理和控制
数据结构化
数据的共享性高,冗余度低,易扩充
数据独立性高
数据由DBMS统一管理和控制
(1)列是同质的,既每一列中的分量为同一类型的数据,来自同一个域。
(2)不同的列可出自同一个域,称其中的每列为一个属性,不同的属性的要给予不同的属性名。
(3)列的顺序无所谓,即列的次序可以任意交换。
(4)任意两个元组不能完全相同。
(5)行的顺序无所谓,即行的次序可以任意交换。
(6)分量必须取原子值,即每一个分量都必须是不可分的数据库。
有关系如下所示:
关系代数S ⋈ R运算结果是什么?S与R按公共属性B进行等值连接的结果是什么?
自然连接:在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉
写出关系代数S与R的按公共属性相等所进行的左外连接运算表达式,运算结果是什么?
概念:视图是从一个或几个基本表(或视图)导出的表,是一个虚表。数据库只存放视图的定义(sql语句),不存放视图对应的数据。视图一经定义,就可以被查询,删除,但是更新操作有一定限制。
作用:
1.简单性。简化复杂查询;
2.安全性。对基表中的其它列起到安全和保密的作用,可以限制数据访问。
3.逻辑数据独立性。视图可帮助用户屏蔽真实表结构变化带来的影响。
视图消解:在执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图是否存在,如果存在,则从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换为对基本表的查询,在后在执行修正后的查询(简单说就是把对视图的查询转化为对基本表的查询称为视图的消解)
概念:保护数据库防止恶意的破坏和非法的存取
措施:用户标识和鉴定,存取控制,视图,审计,密码存储
SQL 注入入侵:欺骗服务器执行恶意的sql语句
解决方案:我只知道预处理,拜拜吧
数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。
实体完整性
参照完整性
用户定义的完整性
遇到现编
物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的
逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,当数据的逻辑结构改变时,用户程序也可以不变。
采用什么技术手段:二级映像
外模式/模式映像:保证了数据的逻辑独立性
内模式/模式映像:保证了数据的物理独立性
T1:A=A*B+C;
T2:B=B+A;
(1)试设计一个符合两段锁协议且不产生死锁的可串行化调度,设A初值为2,B初值为5,C初值为1,你的设计是否冲突可串行化?
(2)设计一个不符合两段锁协议且不产生死锁的可串行化调度,设A初值为2,B初值为5,C初值为1,你的设计是否冲突可串行化?
概念:访问并可能更新数据库中各种数据项 的一个程序执行单元 (unit)。
性质:ACID
原子性,一致性,隔离性,持久性
例举丢失更新,如何解决丢失更新——对写操作加写锁,直到事务结束,解决丢失修改,对应的封锁协议——一级封锁协议,MySQL对应的隔离级别是什么——读未提交。如何设置隔离级别?
例举读脏数据,如何解决脏数据——对读操作加读锁,读完放锁,解决读脏数据,对应的封锁协议——二级,MySQL对应的隔离级别是什么——读已提交。如何设置隔离级别?
例举不可重复读,如何解决不可重复读——对读操作加读锁,指导事务结束,解决不可重复读,对应封锁协议——三级,MySQL对应的隔离级别是什么——可重复读。何设置隔离级别?
例举幻读,如何解决幻读,对应的封锁协议,MySQL对应的隔离级别是什么——可串行化如何设置隔离级别?
不用管丢失更新1,2
死锁:两个事务互相申请对方锁住的资源导致两个事务永远不能结束
解决方案:超时法,等待图法。
什么是多粒度树,假设有XSCJ数据库,数据库系统将采取三级粒度形式,从上至下是数据库,表及记录,XSCJ数据库有表STU与COU,现在需对STU表的S001修改年龄属性,需要对各级粒度分别加上什么锁才可能成功实现修改。
假设有XSCJ数据库,数据库系统将采取三级粒度形式,从上至下是数据库,表及记录,XSCJ数据库有表STU与COU,当前系统有有事务T1与T2,T1需对STU表的S001修改年龄属性, 已获取所需要的锁,T2需要查询STU表中部分记录, 在三级记录树中需要对各级粒度如何加锁才可能成功实现修改。
三级不用说
两端就是事务中出现解锁就不能上锁,上锁解锁连续。
一次封锁:一次将所有要使用的数据全部加锁
串行调度: 各个事务之间没有任何操作交错执行,事务一个一个执行
可串行化调度:多个事务的并发执行结果与这些事务按照某个顺序顺次执行(串行调度)的结果相同
冲突可串行化调度:如果一个调度Sc在保证冲突操作(rw,ww)次序不变的情况下通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,且Sc’是串行的,则称调度Sc是冲突可串行化调度。判定方法:优先图
书本P305页题目4,5
介质故障:
假设系统采用备份策略是静态海量+动态增量备份,每周星期天的夜间00:00静态海量备份(包括日志备份)一次,每天夜间00:00动态增量备份一次。系统每20分钟发一次检查点命令。故障发生于周三上午9:30.
静态备份是没有未提交的事务 ,不需要撤消,如果是动态就需要撤消未完成的事务。
安装一份海量备份,3分增量备份:对检查点到9:30之间的根据日志进行重做,对于故障发生未完成的撤销。(注意区分,下面的是静态增量)
简述数据库系统发生软故障(即系统故障)的恢复过程。假设系统采用备份策略是静态海量+动态增量备份,每周星期天的夜间12:00静态海量备份(包括日志备份)一次,用时2个小时,每天夜间12:00动态增量备份一次。用时20分钟,系统每小时发一次检查点命令。故障发生于周三上午9:30.。
不需要安装备份。对检查点前已提交的不操作,故障时未完成的撤销,检查点到故障时已完成的重做。
关于Tyep
解释其主要特点:计算与存储分离、日志即数据库
什么是顺序写、随机读?
什么多版本并发控制机制(MVCC),与锁定机制的差别。
设数据库Dept_Emp有二个基本表:
部门表:DEPT(DNO CHAR(2),DNAME VARCHAR(20),MGR_ENO CHAR(4))其属性分别表示部门号,部门名,部门经理职工号。表名为DEPT。
职工表:EMP(ENO CHAR(4),ENAME CHAR(8),AGE TINYINT,SEX BIT,SALARY NUMERIC(6,1),DNO CHAR(2)),其属性分别表示职工的工号,姓名,年龄,性别,工资,所工作部门的编号。表名为EMP,其中SEX中0表示男性,1表示女性
试写出完成下列要求的SQL(或关系代数)语句
1.检索所有工资高于10000元且年龄在30至40间职工号、姓名及所在部门名(SQL)(2分)
select eno,ename,dno from emp join dept on salary > 10000 and age > 30 and age < 40;
2.检索所有工资高于20000元且“部门名(关系代数)(2分)
select eno,ename,dno from emp join dept on salary > 20000 and age > 30 and age < 40;
3.画出题2的优化树
两种画法都行
4.根据题3的优化树创建合适的索引实现物理优化,假设公司总共有50个部门,每个部门员工人数平均1000,每个部门工资高于20000元的员工数据大约占10%,员工年龄分布于18-60间,基本平均分布(SQL),根据启发式规则分析创建索引与无创建索引时的查询效率(3分)。
CREATE INDEX Index_Pers ON EMP (salary,age) ;
5.检索各部门的平均工资(注可能有部门仅刚成立,尚无人员)(2分)
select avg(salary) from EMP join DEPT on EMP.dno = DEPT.dno group by DEPT.dno;
6.检索平均工资高于8000元的部门号、部门名及具体的平均工资(SQL)(2分)
select DEPT.dno,DEPT.dname,avg(salary) from EMP join DEPT on EMP.dno = DEPT.dno group by DEPT.dno having avg(salary)>8000;
7.
(1)创建存储过程P1删除某部门及其相关信息。
creat procedure p1(inputDno char(2))
begin
delete from EMP where dno = inputDno;
delete from DEPY where dno = inputDno;
end;
(2)运行该存储过程,完成‘01’号部门的职工删除(注意事务的应用)(4分)
call p1('01');
8.将员工‘E001’转部门,从‘行政部’门转至‘人事部’,并成为人事部门的经理(注意事务成功与失败的两种情况处理)。(3分)
start transaction;
update emp set eno = ’人事部号' where eno='E001';
update dept set mgr_eno = 'E001' where dno = '人事部号';
commit;
start transaction;
update emp set eno = ’人事部号' where eno='E001';
update dept set mgr_eno = 'E001' where dno = '人事部号';
rollback;
9.创建视图,视图名为V1,属性为(ENO,ENAME, DNAME)。说明该视图是否行列子集视图?(SQL)
(3分)
create view view_name(ENO,ENAME, DNAME) as select ENO,ENAME, DNAME from emp;
10.设数据库服务器中已有用户U1,将对EMP表的查询与修改权授予用户U1(SQL)(2分)
grant select,update on emp to u1;
11.针对SQL SERVER写出表DEPT表定义,必须定义主键,若有外键必须定义外键,DNAME、DNO非空且唯一(SQL)。(3分)
create table dept(
dno char(2) primary key,
dname varchar(20) not null unique,
mgr_eng char(4),
constraint fk_forkey_name foreign key (dno) references(emp.dno)
);
12.为EMP表定义以下约束。SALARY必须在大于0,小于200000(SQL)(2分)
alter table emp add check(salary>0 and salary<200000);
13.设计一个触发器,每个部门的员工人数不得大于20人(SQL)。(3分)
create trigger trigger_name
before insert
on emp for each row
begin
if(select count(*) from emp where dno = New.dno)>20 then
signal sqlstate '45000' set message = '插入员工失败,人数超过20';
end if;
end;
四、数据库设计题(约15分)。(从以下四个类型需求中考试)
1)试画出ER图,图上应包括实体、(属性可省略),联系及其类型。(8.5分)注:ER图采用PPCHEN表示方式 ,即实体用矩形框,联系用菱形框等
2)将ER转换成关系模型(该关系模式应为3NF,若非3NF需说明理由),注明各关系模式的主键(用下划线)和外键(用下划波浪线)(8.5分)
1.图书管理系统
这是一个图书馆的管理系统,只要是图书馆的读者,都可以借阅图书;每个读者在办理图书证时须缴纳一定的押金、登记身份证号、姓名、电话、联系地址,并将身份证扫描存储等;图书使用馆藏编号,ISBN编码,作者,出版社,价格,版次,出版时间等描述;每个出版社可出版多本图书,但每本图书只可以是一个出版社出版;每个作者可以编著多本图书,每本图书也可以多个作者编著;对于馆藏编号使用国家规定的中图分类规则编码;图书馆同一个ISBN号的图书可能购买多本,每本具体的图书都必须记录其入库时间,并且类似超市货物具有唯一的图书条形码;读者每借阅一本图书必须登记借书时间,还书时间等相关信息;软件系统还必须实现借书逾期及续借的业务处理,图书馆规定每本书最多只能借60天,只能续借一次,续借时长为30天,若逾期每本书每天罚款0.1元,若丢失则原价的1.2倍赔款,每个读者最多只能借10本书并且所借阅图书的金额必须不超过押金,对于馆藏仅一本的图书不允许外借,只可在馆阅读;每个读者借书时可能发生借书逾期问题,丢失、缺页问题等,系统也应提供相应的处理。
2. 教学教务管理网站,参考实验要求
3.淘宝的“我的订单”模块中订单及订单明细的设计,用户需登录才可以看到自已的订单
4.厦门航空的查询航班动态及价格的网站,如下所示:
五、范式应用题(约12分)。
1)有描述学期学生成绩关系模式Student(MNO,MNAME,SNO,SNAME,CNO,CNAME,TNO,TNAME,GRADE),分别表示专业号,专业名,学号,姓名,课程号,课程名,教师号,教师名及成绩,存在的语义如下所示:每个专业有唯一的专业号,每个学生有唯一的学号,每个教师有唯一的教师号,每个开课课程有唯一的课程号,名字都可能重复。每个专业有多名学生,每个学生只能属于一个专业;每个专业有多个老师,每个老师只能属于一个专业;每个老师可以教授多门课程,每门开课课程只能一个老师教授;每个学生选修一门课程有唯一的成绩,对应唯一的老师。
要求:
先找一下主码应该是:{SNO,CNO}
(1)写出该模式的最小函数依赖集.
所有的关系:
F={MNO->MNAME,
SNO->SNAME,MNO
TNO->TNAME,MNO
CNO->CNAME,TNO
SNO,CNO->GRADE,TNO}
(2)写出该模式最高属于几范式?该模式存在的问题
1NF,非主属性不对主键完全依赖。
(3)若不属于3NF,请分解为3NF。
R1{MNO,MNAME} F1 MNO->MNAME
R2{SNO,SNAME,MNO} F2 SNO->SNAME,MNO
R3{TNO,TNAME,MNO} F3 TNO->TNAME,MNO
R4{CNO,CNAME,TNO} F4 CNO->CNAME,TNO
R5{SNO,CNO,GRADE} F5 SNO,CNO->GRADE
(4)验证分解的无损与保函。(和最小函数依赖集比较)
F1∪F2∪F3∪F4∪F5与F等价,所以保函。
证明无损性参看视频
在讲视频里的:
表格按要求填好a,b以后,根据式子一次次迭代,每次迭代这样做:
找包含推导式左边元素的列,列元素相同的作为一类,接着找推导式右式对应的列,如果存在a,把还是b的更新为a,如果没有a,更新所有b的更新为b行坐标最小的
第一个式子找A列的,1,2,5行相同,然后看C列,这三行C列没有a,把所有b换成行数最小的b13
变成这样
第二个式子找C列,相同的是{1,2,5}{3,4}
2,5行的a4来源第一行的a4,第三行的来源第四行的
如果存在一行都是a就是无损,否则有损
这题是有损的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。