数据库押题

1 sql和查询

1.拿到题目,首先看条件里有什么属性,查询的是什么属性。

将有需要属性的表全部乘起来,再写条件。

2.尽量不要用natural join,用乘起来然后,每个条件都另起一行
where …, …
and …,…

3.查询唯一,可以使用unique,方法是,外查询的属性,写在unique的条件里面,unique用unique查询一个表的所有符合条件的值。

比如A, B通过属性a连接,要求A在B中属性b是唯一的。

select A.a

from A, B as s

where A.a=s.a

And unique(
select b from B as t
where t.a = s.a
)

或者使用count(distinct 属性)=1

select A.a from A, B

where A.a=B.a

grouping by A.a

having cout(distinct B.b)=1

2.找最大最小值,使用>=all(…)

3.如果是自身和自身属性比,则自身和自身乘起来,注意只需要乘比的那个属性,如果一个表和它连接,可以先自乘,再连接

4.如果需要连接,尽量在连接前把条件先选择好,然后再连接。

5.写事务不要忘记commit ;

ER图

1.从描述画ER图,首先先写出关系模式,然后:

实体是否是别的实体的一个属性,是则转为属性,删除联系集。

如果是多值属性,单独变为实体集,新增联系集。

如果属性是别人的主码,删除该属性,新增联系集。

注意:多对一和一对多,注意弱实体集和强实体集的联系集是双线菱形。

2.从ER图画关系模式

在之前的基础上,再次化简,

如果A,B,AB,某一个完全参与,则三个表化简为AB

强弱实体集的联系集是冗余的。

关系范式

1.正则覆盖,删去哪边的,就让F在这边。

比如AB->C,删除B,那么看F->(A->C)

比如A->BC,删除B,那么看(A->C)和F-{A->BC}->F

2.候选码,首先看从来没有在右边出现过的,一定是主属性。如果还是不行,挑若干个出现过的,一个一个试验。此时,注意没有出现在依赖中的,一定也是主属性。

3.BCNF分解:判断方法:a->b, 满足b属于a或者a是超码

分解方法:对于每一个依赖,如果不满足a是超码,分解为{a,b}和R-b+a

4.3NF分解:判断方法:a->b, 满足b是主属性或者a是超码或者b属于a三个条件之一。

分解方法:求正则覆盖,把每个依赖都分解为一个子集。如果不包含候选码,则加入一个包含候选码的子集,可以保证无损分解。

5.依赖保持:要求正则覆盖的每个依赖在分解后的一个子集中成立。

无损分解:要求分解后两个子集交集包含候选码

4 XML

1.如果是自己设计,尽量都写为子元素。

2.最外面不要忘记,括号里面才是开始写的东西

别忘记,最外面一层也必须写进<!ELEMENT xxx>里面

3.xPath查询,/最外面名字/…/…,括号表示这层节点需要满足的条件。

括号里面通过./继承括号外面路径,

属性需要加上@, 方括号里面,子节点的条件不需要加@

可以使用id(属性)直接定位到id所在的节点

可以使用count(路径)计算节点个数

返回时需要返回text()

如果给了DTD,画出一颗树,更加方便

4.xQurey查询,for $p in path where 。。

path和3中的一样,但是最好不要写太多条件。

where 里面相当于原来path里面括号内的内容。可以用$p作为代替for … in path中的path。return $p/@属性,返回需要的属性

可以用嵌套的for,就是笛卡尔积。

返回的时候,不要忘记加<xx>{@返回的属性}<xx>

5 索引

记住叶节点最多n-1个key, 最少 [ n − 1 2 ] [\frac{n-1}2] [2n1]个key, 上取整

非叶节点最多n个孩子,最少n/2上取整个孩子

高度就是以非叶节点的孩子数为底数,以叶节点个数(key需要转为叶节点个数)为真数取对数。

任何内存替换,必须从根开始读到该节点。

6 查询

1.估算查询结果的大小,看查询的语句里面是多少记录,每个查询条件都看成均匀概率乘起来

2.有关block seek和block transfor,猜测考的是hash join,分为递归和非递归的情况。如果猜错了,希望考block nested loop,不然直接gg

7 锁

1.可能考upgrade和downgrade,具体怎么考不知道

2.如果是事务,画等待图,如果是锁表,画优先图

看是否可串行化,看等待图是否有环

8 恢复算法

猜测考Aries恢复算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值