三、如下关系模式 Discuss(user1,user2,topic)
插入时 user1 的字典序号总是小于 user2
1) 写 SQL 语句:所有被 Alice 和 Bob 讨论但不被 Alice 和 Crowe 讨论的话题
2) 写 SQL 语句:被超过 10 对用户讨论的话题的个数
3) 为什么不给所有单属性建立索引,说出至少 2 条原因。
4) 数据库管理员如何为数据库建立一组好的索引。
select d1.topic
from Discuss d1
where d1.user1 = 'Alice'
and d1.user2 = 'Bob'
and d1.topic not in (select
from Discuss d2
where d2.user1 = 'Alice'
and d2.user2 = 'Crowe')
select count(*)
from (select d.topic
from Discuss d
group by d.topic
having count(*) > 10) as tmp
三个方面:时间、空间、后期维护
应该建立索引的条件
1) 在经常需要搜索的列上,可以加快搜索的速度;
2) 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
3) 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
4) 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;外键建索引由于连接加快还会减少死锁几率。
5) 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
6) 在在经常使用在 WHERE 子句中的列上面创建索引,加快条件的判断速度。
(1)将以上关系模式分解到3NF,在主码下面划线,请用箭头标识外码和它指向的主码之间的联系。请注意,分解到3NF后,以上性质有些可能不再成立(10分
(2)A到H哪些性质继续成立(10分)
(3)对于新的关系模式不满足的性质,数据库管理员如何使得性质继续成立?(10分)
Professor(professor_id ,professor_name,professor_office_id)
Student(student_id,student_name,studeng_office_id,student_designated_refrigerator_id) references RefrigeratorRefrigerator(refrigerator_id,refrigerator_owner_id,refrigerator_size)
Secretary(Secretary_id,Secretary_name,Secretary_office)
A,C,D,E
创建关系:
- Wroks(professor_id,student_id) References Professor,Student
- Pro_Sec(professor_id ,Secretary_id) References Professor,Secretary
五、关系模式(A,B,C,D,E,F,{AB->C,BC->AD,D->F,CF->B}),请问{A,B}的属性闭包是什么?
闭包算法:P191
1) X^0^ = AB, 求B
2) B = C,/这里的B是指从AB推出来的/
3) \(X^{1} = X^{0} \cup B\) = ABC
这时候再用X^1^ 代替X^0^继续算法
得到答案:ABCDF
原文:https://www.cnblogs.com/lvgj/p/12492071.html