??xml version="1.0" encoding="utf-8" standalone="yes"?>
若R∈BCNF
每一个决定属性集Q因素)都包含(候选)?br />
R中的所有属性(主,非主属性)都完全函C赖于?br />
R?NFQ证明)
若R?NF 则 R不一定∈BCNF
在关pL式STJQSQTQJQ中QS表示学生QT表示教师QJ表示评?br />
每一教师只教一门课。每门课pq教师教Q某一学生选定某门课,q定了一个固定的教师。某个学生选修某个教师的课q定了所选课的名U?Q? (SQJ)→TQ?SQT)→JQT→J
]]>
一?span lang="EN-US">m阶的B树满下列条?/span>
?/span>
(1) 每个l点臛_?span lang="EN-US">m子树?o:p>
(2) 除根l点外,其它每个分支臛_有m/2子树?o:p>
(3) 根结点至有两棵子树(除非B树只有一个结??o:p>
(4) 所有叶l点在同一层上?span lang="EN-US">B树的叶结点可以看成一U外部结点,不包含Q何信息?o:p>
(5)
?span lang="EN-US">j个孩子的非叶l点恰好有j-1个关键码Q关键码按递增ơ序排列。结点中包含的信息ؓ
?/span>
(p0,k1,p1,k2,p2,
?/span>
,kj-1,pj-1)
其中Q?span lang="EN-US">ki为关键码Q且满ki<ki+1Qpi为指向子树根l点的指针,q且pi所指的子树中所有关键码k都满ki<k<ki+1?o:p>
实际上,如果一个结点中?span lang="EN-US">j个关键码Q则q应包括j个指向相应记录的指针Q每个l点既是索引的烦引块Q又是基本烦引块(能直接给录存攑֜址的烦引块)?o:p>
1. B树的定义:
1970q_R.Bayer和E.mccreight提出了一U适用于外查找的树Q它是一U^衡的多叉树,UCؓB树,其定义如下:
一m阶的B树满下列条Ӟ
?树中每个l点臛_有m个孩子;
?除根l点和叶子结点外Q其它每个结点至有m/2个孩子;
?若根l点不是叶子l点Q则臛_?个孩子;
?所有叶子结炚w出现在同一层,叶子l点不包含Q何关键字信息Q?br /> ?有k个孩子的非终端结Ҏ好包含有k-1个关键字?br /> 在B树中Q每个结点中关键字从到大排列,q且当该l点的孩子是非叶子结ҎQ该k-1个关键字正好是k个孩子包含的关键字的值域的分划?br /> 因ؓ叶子l点不包含关键字Q所以可以把叶子l点看成在树里实际上q不存在外部l点Q指向这些外部结点的指针为空Q叶子结点的数目正好{于树中所包含的关键字M数加1?br /> B树中的一个包含n个关键字Qn+1个指针的l点的一般Ş式ؓQ?Qn,P0,K1,P1,K2,P2,?Kn,PnQ?br /> 其中QKi为关键字QK1<K2<?lt;Kn, Pi 是指向包括Ki到Ki+1之间的关键字的子树的指针?br />
2. B树的查找:
在B树中查找l定关键字的Ҏ是,首先把根l点取来Q在根结Ҏ包含的关键字K1,?kj查找l定的关键字Q可用顺序查找或二分查找法)Q若扑ֈ{于l定值的关键字,则查找成功;否则Q一定可以确定要查的关键字在某个Ki或Ki+1之间Q于是取Pi所指的l点l箋查找Q直到找刎ͼ或指针Pi为空时查扑֤败?br />
查找法演示
性能分析Q?br />
设B树包含N个关键字Q因此有N+1个叶子结点,叶子都在WI层。因为根臛_有两个孩子,因此W二层至有两个l点。除根和叶子外,其它l点臛_有┌m/2┐个孩子Q因此在W三层至有2*┌m/2┐个l点Q在W四层至有2*┌m/2?个结点,Q.Q,在第I层至有2*┌m/2┐I-1 个结点,于是有:
N+1 ?2*┌m/2┐I-1
卻I I ?log┌m/2? )
q个公式保证了B树的查找效率是相当高的?
3. B树的插入:
当在叶子l点处于WL+1层的B树中插入关键字时Q被插入的关键字Lq入WL层的l点?br /> 若在一个包含j<m-1个关键字的结点中插入一个新的关键字Q则把新的关键字直接插入该结点即可;但若把一个新的关键字插入到包含m-1Qm为B树的Ӟ个关键字的结点中Q则引L点的分裂。在q种情况下,要把q个l点分裂Z个,q把中间的一个关键字拿出来插到该l点的双亲结点中去,双亲l点也可能是满的Q就需要再分裂、再往上插Q从而可能导致B树可能朝着根的方向生长?br /> 插入法演示
4. B树的删除:
当从B树中删除一个关键字KiӞȝ分ؓ以下两种情况Q?br /> 如果该关键字所在的l点不是最下层的非叶子l点Q则先需要把此关键字与它在B树中后Ҏ位置Q即以指针Pi所指子树中的最关键字Y代替KiQ然后在相应的结点中删除Y?br /> 如果该关键字所在的l点正好是最下层的非叶子l点Q这U情况下Q会有以下两U可能:
?若该关键字Ki所在结点中的关键字个数不小于┌m/2┐,则可以直接从该结点中删除该关键字和相应指针即可?
?若该关键字Ki所在结点中的关键字个数于┌m/2┐,则直接从l点中删除关键字会导致此l点中所含关键字个数于┌m/2?1 。这U情况下Q需考察该结点在B树中的左或右兄弟l点Q从兄弟l点中移若干个关键字到该l点中来Q这也涉及它们的双亲l点中的一个关键字要作相应变化Q,使两个结点中所含关键字个数基本相同Q但如果其兄弟结点的关键字个C很少Q刚好等于┌m/2?1 Q这U移动则不能q行Q这U情形下Q需要把删除了关键字Ki的结炏V它的兄弟结点及它们双亲l点中的一个关键字合ƈZ个结炏V?br />