1.数据库管理系统中DDL所能完成的操作包括哪些?
create drop alter
2.关系数据库设计中,至少应满足的规范化条件是什么?
1NF
3.判断分解后的关系模式是否合理的两个重要标志
无损分解和保持依赖
4.基于多表的视图,可以完成哪些操作,不能完成哪些操作?
可以查询,不能更新。
可以根据视图新建视图,但是不能update insert delete
换成基于聚集的视图答案也是相似的,单表视图包含所有非空属性(主属性)理论上可以插入修改删除。如视图不包含所有非空属性,则不能插入。复习视图
5.实体之间的联系有哪几种?
一对一 多对多 一对多 多对一
6.简述等值连接和自然连接的异同。
等值连接是通过on把两个选中该属性值相等的元组合并。
自然连接也是合并,但是是只能遇到同名属性列进行连接,它们两个都是在笛卡尔乘积的情况下进行筛选。
7.简述where子句和having子句的区别。
都是用于进行筛选,where对一般属性,having 对聚集属性列进行判断。
8.简述两阶段锁的具体含义。
增长阶段:事务可以获得锁,但是不能释放锁。
缩减阶段:事务可以释放锁,但是不能获得新锁。
9.简述数据库中为何要进行并发控制?
防止数据库中发生与时间有关的错误。
10.举例说明数据库中死锁含义及其解决方法。
事务之间相互等待对方所占用的资源。
解决方法是两个死锁事务回滚其中的一个。
解决方法主要有两种,一种是死锁预防,一种是允许系统进入死锁状态,然后试着用死锁检测与死锁恢复机制进行恢复。
1.吉林大学的BBS系统,用户可以以游客的身份游览其他人的留言贴,但是如果想要发言或者回复留言,则必须先登陆方可留言,为什么?在数据库端如何实现?
答:进行了身份的验证,只有成为正式用户,才会被赋予留言的权限。在数据库端对用户赋予权限grant insert update delete on jluBBS to user
2.在从银行卡向学校一卡通转账的过程中,如果转账金额已经从银行卡中扣除,但是一卡通还未到账时,机器死机无法正常工作了,请问数据库处于什么状态,这样的问题如何解决?
答:数据库处于不一致的状态,(如果是问事务则处于部分提交的状态),
解决方案重要内容可看课本360页面,此时银行卡中钱已经扣除,此时应该在机器恢复后给一个补偿事务,给一卡通补上金额。
例子,事务故障有两种方案,一种是重启事务,一种是杀死事务,在处理可见的外部写的时候,写操作应该只有在事务进入提交状态才会发生,可以通过把与外部写有关的数据存入非易失性存储器来实现。
对于自动收款机问题,如果在支付现金前机器出故障,重启后系统应该执行一个补偿事务,将现金存回用户的账户。
如果是Web预定问题,预定的服务器发生崩溃或者网络连接丢失,事务已经提交,但是外部写没有生效,这样应用程序必须设计成当用户再次连接到Web程序时,她可以看到她的事务是否成功。
3.支付宝账号通常与某一银行卡绑定,该卡不可透支,若目前卡内余额100元,假设一人在网上使用该支付宝账号付款100元的同时,另外一人使用绑定银行卡刷卡消费100元,能否支付成功?若不可以,在数据库端如何控制?
答:不可以。使用串行化控制。
4.学校所有学生的数据都存在于同一个表中,但各个学院的教务管理人员登陆后只能看到自己学院的学生,请问,在数据库端是如何实现的。
答:基于这张表创建各个学院的视图,然后对不同学院的用户分配相应权限。
1.吉林大学为了提高实验教学质量,为每门实验课配备了若干指导老师,指导学生实验。学院开设多门实验课程供学生选择,每个学生可以选择一到多门实验课,每门课程有若干指导教师,每个教师可以参与多门实验课;在实验课中,一位教师负责指导多个学生,而一个学生必须要有一名指导老师。
1.根据上述需求,画出E-R模型。
2.将E-R模型转化为对应的关系模式,并说明每个关系模式中需要设置的完整性约束。(实体集属性根据实际情况自行设定,每个实体不少于三个属性,不多于五个属性集)
实验课程( 课 程 i d ‾ \underline{课程id} 课程id,上课名,上课时间)
选择( 课 程 i d ‾ \underline{课程id} 课程id, 学 生 i d ‾ \underline{学生id} 学生id)
学生( 学 生 i d ‾ \underline{学生id} 学生id,学生名,学生电话, 教 师 i d ‾ \underline{教师id} 教师id)
指导教师( 教 师 i d ‾ \underline{教师id} 教师id,教师名,教师电话)
参与( 课 程 i d ‾ \underline{课程id} 课程id, 教 师 i d ‾ \underline{教师id} 教师id)
为了保证全参与,可以使用断言实现,因为无法在设计中表示,选择和学生之间的全参与可以不写。
1.有仓库-物料存储系统,其关系模式如下:
W(Wid,WN,Addr);分别表示仓库(仓库号,仓库名称,地址)
M(Mid,MN,Price,p_Time,q_Time);分别表示(物料号,物料名称,价格,生产日期,保质期)
ST(Wid,Mid,SNum);分别表示(仓库号,物料号,存储数量)
1.用关系代数表达式,查询存储了全部物料的仓库名称
G是聚集函数符号
思路:根据仓库号对ST进行分组,计算物料号的个数,如果物料号个数等于M中物料号的总数,则输出W中的仓库号(太复杂了不好使)
W i d _{Wid} WidG c o u n t _ d i s t i n c t ( M i d ) ( S T ) _{count\_distinct(Mid)}(ST) count_distinct(Mid)(ST)
上面的做错了
实际上的思路只要选择除法运算就可以
Π W N ( W ⋈ Π W i d ( S T ÷ Π M i d ( M ) ) ) \Pi_{WN}(W⋈ \Pi_{Wid}(ST\div\Pi_{Mid}(M))) ΠWN(W⋈ΠWid(ST÷ΠMid(M)))
2.用关系代数表达式,查询所有存储数量高于100的物料号
3.用SQL语句,查询所有没有生产日期的物料号和物料名称
SELECT Mid,MN
FROM M
WHERE p_Time IS NULL;
4.用SQL语句,建立视图V,统计截至到今天,还有三个月就要到保质期的物料号和物料名称。
CREATE VIEW
(
SELECT Mid,MN
FROM M
WHERE q_Time-p_Time=3
);
5.用SQL语句,修改物料名为”海绵“的库存,增加100件
UPDATE st
SET SNum=CASE
WHEN st.Mid=(SELECT Mid FROM m WHERE MN='海绵') THEN
SNum+100
ELSE
SNum
END ;
2.设有关系模式R(A,B,C,D,E,F,G)其函数依赖集F={AB->C,B->DE,C->G.G->A}求模式R的所有候选码。
解:所有在左边的属性有ABCG
所有在右边的属性有CDEGA
左部属性B
右部属性DE
双部属性ACG
外部属性F
首先计算
{ B F } + = { B F D E } {\{BF\}}^+=\{BFDE\} { BF}+={ BFDE}
然后计算 A B F + 、 C B F + 、 G B F + ABF^+、CBF^+、GBF^+ ABF+、CBF+、GBF+
第一个可以推{ABCDEFG}
第二个可以推{ABCDEFG}
第三个可以推{ABCDEFG}
因此ABF CBF GBF都是候选码
3.设有关系R和函数依赖F:R(A,B,C,D,E) F={ABC->DE,BC->D,D->E}请将关系R逐步分解为3NF。
解:首先使用合并律,发现不需要合并
然后尝试去除无关属性
ABC->DE中A可以去除,因为BC->D D->E,可知BC->DE
然后BC->D可以去除,因为已经有BC->DE
BC->DE中E可以去除,因为D->E
最终得 F c F_c Fc={BC->D,D->E}
求得R的主码
F左边有属性ABCD
右边有属性DE
左部属性 ABC
右部属性E
双部属性D
{ABC} + ^+ +={ABCDE}
ABC就是候选码,不在BCD和DE中,加上
有因此可以分解为{ABC}{BCD}{DE}
4.设有如图所示调度S,判断S是否为冲突可串行化调度,如果是,则给出与S等价的一个串行化调度。
解:求一下优先图
可以看到图中没有环,说明是可串行化调度,一个串行化调度是 T 3 − > T 4 − > T 1 − > T 2 T_3->T_4->T_1->T_2 T3−>T4−>T1−>T2