离散数学的等价关系

离散数学的等价关系,第1张

集合上每个等价关系对应集合的一种划分,集合的每一种划分又对应于该集合的一个等价关系,不同的等价关系对应于集合的划分也不同,因此集合有多少不同划分,就有多少不同等价关系,三个元素的集合共有5种不同划分,(含有1块和3块各有1种,含有2块有3种),故含有三个元素的集合,可以确定5种等价关系

如A={1,2,3},则5种不同划分为

{{1}, {2}, {3}};{{1}, {2,3}};{{1,3}, {2}};{{1,2}, {3}};{{1, 2, 3}};

对应的等价关系为

R1={(1,1),(2,2),(3,3)};R2={(1,1),(2,2),(2,3),(3,2),(3,3)};

R3={(1,1),(1,3),(3,1),(2,2),(3,3)};

R4={(1,1),(1,2),(2,1),(2,2),(3,3)};

R5={(1,1),(2,2),(3,3),(1,2),(2,1),(2,3),(3,2),(1,3),(3,1)};

一般地,对有n个元素的集合有Bn种不同的划分(等价关系),Bn称为Catalan数

Bn=2n!/((n+1)n!n!),如4个元素的集合,可以确定14种等价关系

我们先来看第一个阶段,MySQL慢的诊断思路,一般我们会从三个方向来做:

第一个方向是MySQL内部的观测

第二个方向是外部资源的观测

第三个方向是外部需求的改造

11 MySQL 内部观测

我们来看MySQL内部的观测,常用的观测手段是这样的,从上往下看,第一部分是Processlist,看一下哪个SQL压力不太正常,第二步是explain,解释一下它的执行计划,第三步我们要做Profilling,如果这个SQL能再执行一次的话, 就做一个Profilling,然后高级的DBA会直接动用performance_schema ,MySQL 57 以后直接动用sys_schema,sys_schema是一个视图,里面有便捷的各类信息,帮助大家来诊断性能。再高级一点,我们会动用innodb_metrics进行一个对引擎的诊断。

除了这些手段以外,大家还提出了一些乱七八糟的手段,我就不列在这了,这些是常规的一个MySQL的内部的状态观测的思路。除了这些以外,MySQL还陆陆续续提供了一些暴露自己状态的方案,但是这些方案并没有在实践中形成套路,原因是学习成本比较高。

12 外部资源观测

外部资源观测这部分,我引用了一篇文章,这篇文章的二维码我贴在上面了。这篇文章是国外的一个神写的,标题是:60秒的快速巡检,我们来看一下它在60秒之内对服务器到底做了一个什么样的巡检。一共十条命令,这是前五条,我们一条一条来看。

1uptime,uptime告诉我们这个机器活了多久,以及它的平均的负载是多少。

2dmesg -T | tail,告诉我们系统日志里边有没有什么报错。

3vmstat 1,告诉我们虚拟内存的状态,页的换进换出有没有问题,swap有没有使用。

4 mpstat -P ALL,告诉我们CPU压力在各个核上是不是均匀的。

5pidstat 1,告诉我们各个进程的对资源的占用大概是什么样子。

我们来看一下后五条:

首先是iostat-xz 1,查看IO的问题,然后是free-m内存使用率,之后两个sar,按设备网卡设备的维度,看一下网络的消耗状态,以及总体看TCP的使用率和错误率是多少。最后一条命令top,看一下大概的进程和线程的问题。

这个就是对于外部资源的诊断,这十条命令揭示了应该去诊断哪些外部资源。

13 外部需求改造

第三个诊断思路是外部的需求改造,我在这里引用了一篇文档,这篇文档是MySQL的官方文档中的一章,这一章叫Examples of Common Queries,文档中介绍了常规的SQL怎么写, 给出了一些例子。文章的链接二维码在slide上。

我们来看一下它其中提到的一个例子。

它做的事情是从一个表里边去选取,这张表有三列,article、dealer、price,选取每个作者的最贵的商品列在结果集中,这是它的最原始的SQL,非常符合业务的写法,但是它是个关联子查询。

关联子查询成本是很贵的,所以上面的文档会教你快速地把它转成一个非关联子查询,大家可以看到中间的子查询和外边的查询之间是没有关联性的。

第三步,会教大家直接把子查询拿掉,然后转成这样一个SQL,这个就叫业务改造,前后三个SQL的成本都不一样,把关联子查询拆掉的成本,拆掉以后SQL会跑得非常好,但这个SQL已经不能良好表义了,只有在诊断到SQL成本比较高的情况下才建议大家使用这种方式。

为什么它能够把一个关联子查询拆掉呢?

这背后的原理是关系代数,所有的SQL都可以被表达成等价的关系代数式,关系代数式之间有等价关系,这个等价关系通过变换可以把关联子查询拆掉。

上面的这篇文档是一个大学的教材,它从头教了关于代数和SQL之间的关系。然后一步步推导怎么去简化这句SQL。

第一,MySQL本身提供了很多命令来观察MySQL自身的各类状态,大家从上往下检一般能检到SQL的问题或者服务器的问题。

第二,从服务器的角度,我们从巡检的脚本角度入手,服务器的资源就这几种,观测手法也就那么几种,我们把服务器的资源全部都观察一圈就可以了。

第三,如果实在搞不定,需求方一定要按照数据库容易接受的方式去写SQL,这个成本会下降的非常快,这个是常规的MySQL慢的诊断思路。

82 规范化理论

关系数据库中关系规范化问题在1970年Godd提出关系模型时就同时被提出来,关系规范化可按属性间不同的依赖程度分为第一范式,第二范式,第三范式,Boyce-Codd范式以及第四范式人们对规范化的认识是有一个过程的,在1970年时已发现属性间的函数依赖关系,从而定义了与函数依赖关系有关的第一,第二,第三,及Boyce-Codd范式在1976~1978年间,Fagin,Delobe以及Zanjolo发现了多值依赖关系,从而定义了与多值依赖有关的第四范式

范式的定义与属性间的依赖关系的发现有密切关系,在本节中我们介绍函数依赖与多值依赖这两个概念,并在此基础上定义第一范式,第二范式,第三范式,Boyce-Codd范式以及第四范式

821 函数依赖

函数依赖(functional dependency)是关系模式内属性间最常见的一种依赖关系,例如在关系模式S中,S#与Sd间有一种依赖关系即S#的值一经确定后Sd的值也随之唯一地确定了,此时即称S#函数决定Sd或称Sd函数依赖于S#,它可用下面符号表示:

S# → Sd

同样,我们还可以有:

S# → Sa

S# → Sn

但是关系模式SC中的S#与G间则没有函数依赖关系,因为一个确定的学号S#可以允许有多个成绩(它们分别对应于不同的课程),因此成绩G并不能唯一地确定,但是(S#,C#)与G间则存在着函数依赖关系,即有:

(S#,C#)→G

函数依赖这个概念是属语义范畴的,我们只能根据语义确定属性间是否存在这种依赖,此外别无它法可循

定义8-1 设有关系模式R ( U ),X,Y是U的子集,若对于任一个关系R中的任一元组在X中的属性值确定后则在Y中的属性值必确定,则称Y函数依赖于X或称X函数决定Y, 并记作X→Y,而其中X称为决定因素,Y称为依赖因素对于函数依赖,我们一般总是使用一种叫非平凡的函数依赖,在本章中如无特殊声明,凡提到函数依赖时总认为指的是非平凡的函数依赖下面我们对非平凡函数依赖下一个定义

定义8-2 一个函数依赖关系X→Y如满足Y(X,则称此函数依赖是非平凡的函数依赖

为了对函数依赖作深人研究,也为了规范化的需要,我们还得引入几种不同类型的函数依赖

首先;引入一种完全函数依赖的概念,这个概念为真正的函数依赖打下基础例如在S申我们有S#→Sd,因而我们同样也会有:

(S#,Sn) →Sd

(S#,Sa) →Sd

比较这三种函数依赖后我们会发现,实际上真正起作用的函数依赖是:

S#→Sd

而其他两种函数依赖都是由它派生而成的,即是说在函数依赖中真正起作用的是S#,而不是Sn或Sa等这样,我们在研究函数依赖时要区别这两种不同类型的函数依赖,前一种叫完全函数依赖,而后一种叫不完全函数依赖

定义8-3 R( U )中如有X,Y(U,满足X→Y且对任何X的真子集X',都有X'→Y',则称Y完全函数依赖于X并记作:

X Y

定义8-4 在R( U )中如有X,Y(U且满足X→Y,但Y不完全函数依赖于X,则称Y部分依赖于X,并记作:

X Y

由上所述可知,Sd完全函数依赖于S#,但Sd不完全函数依赖于(S#,Sn),亦即有:

S# Sd

(S#,Sn) Sd

(S#,Sa) Sd

在函数依赖中还要区别直接函数依赖与间接函数依赖这两个不同的概念,例如S#→Sd中Sd是直接函数依赖于S#,但如果在属性中尚有系的电话号码DT(假如每个系有唯一的一个电话号码),则有:Sd→DT,从而由S#→Sd及Sd→DT可得到:

S# →DT

在这个函数依赖中,DT并不直接函数依赖于S#,而是经过中间属性Sd传递而依赖于S#,亦即是DT直接依赖于Sd,而Sd又直接依赖于S#,从而构成了DT依赖于S#这种函数依赖关系,是一种间接依赖关系,或叫传递依赖关系我们可以对它定义如下

定义8-5在R( U )中如有X,Y,Z(U且满足:

X→Y,(Y(X ) Y / X,Y→Z

则称Z传递函数依赖于X,否则,称为非传递函数依赖

注意,在这里传递函数依赖与非传递函数依赖仅作概念上区别, 在形式表示上不作任何区别,即Z传递函数依赖于X或Z非传递函数依赖于X都用X→Z表示,这样做的目的也是为了从全局考虑使得表示尽量简单与方便

定义了几种不同的函数依赖关系后,我们在此基础上继续定义一些十分重要的基本概念即有关关键字(keY)的一些概念

定义8-6 在R(U )中如有K(U且满足:

K U

则称K为R的关键字

一个关系模式可以有若干个关键字,我们在使用中选取其中的一个就够了,这个被选中的关键字叫做这个关系模式的主关键字(Prime key),而一般的关键字叫候选关键字(candidate key)

在关系模式S,C,SC中,S的关键字是S#,C的关键字是C#,而SC的关键字是(S#,C#),因为我们有:

S# (S#,Sn,Sd,Sa)

C# (C#,CN,P#)

(S#,C#) (S#,C#,G)

而S中,(S#,Sn),(S#,Sd)等均不是关键字,因为我们有:

(S#,Sn) (S#,Sn,Sd,Sa)

(S#,Sd) (S#,Sn,Sd,Sa)

在一个关系模式中,所有关键字中的属性构成一个集合,而所有其余的属性则构成另一个集合,这两个集合分别叫做这个关系模式的主属性集与非主属性集主属性集中的属性叫做主属性(prime attribute),非主属性集中的属性则叫非主属性(nonprime attribute)例如在关系模式S (S#,Sn,Sd,Sa)中, 主属性集为:

(S#)

而非主属性集为:

(Sn,Sd,Sa)

在SC(S#,C#,G)中,主属性集为:

{ S#, C# }

而非主属性为:

{G}

下面我们给出它们的定义:

定义8-7 R ( U )中所有关键字中的属性构成的集合P称为R(U )的主属性集

定义8-8 在R ( U )中所有非关键字中的属性构成的集合N称为R(U)的非主属性集以上建立了一系列与函数依赖有关的概念,有了它们后就可以讨论与函数依赖有关的几

个范式,它们是第一范式,第二范式及第三范式(实际上第一范式与所有依赖均无关,但为叙述方便起见,可视为与函数依赖有关)至于函数依赖的有关理论的探讨,将在本章稍后部分再作详细介绍

822 与函数依赖有关的范式

在这节中我们讨论四种范式,他们是第一范式,第二范式,第三范式以及Boyce-Codd范式

先介绍第一范式第一范式是关系模式所要遵循的基本条件,即关系中的每个属性值均必须是一个不可分割的数据量如一个关系模式满足此条件则称它属于第一范式(first normal form,或简写成lNF),一个关系模式R如满足第一范式,则可记为R∈lNF

第一范式规定了一个关系中的属性值必须是一个不可分割的数据,它排斥了属性值为元组,数组或某种复合数据等的可能性,使关系数据库中的所有关系的属性值均是最简单的,这样可以做到结构简单,讨论方便一般说来,每个关系模式均要满足第一范式,因为这是对每个关系的最基本要求

下面开始讨论真正与函数依赖有关的三个范式为了讨论这几个范式,我们一般对一个关系模式除了要确定其属性外,还要根据它的语义确定在这个模式上的所有函数依赖设有关系模式R,它有属性集U,而在它上的函数依赖集是F,则此时一个关系模式可由三元组R,U,F确定,它可以写成为:

R ( U,F )

注意,这个表示式仅表示一个三元组而已,它并不表示谓词或关系例如前面所提到的学生关系模式S,它可表示为:

S ({S#,Sn,Sd,Sa},{S#→Sn,S#→Sd,S#→Sa})

又如有一个关系模式叫SCG',它由属性S#,Sn,Sd,Sa, C#, G 组成,其中Ss表示学生所学专业,其他含义同前在这个关系模式中有一些语义信息,它们是:

(1 ) 每个学生均只属一个系与一个专业;

(2 ) 每个学生修读之每门课有且仅有一个成绩;

(3 ) 各系无相同专业

根据上述语义信息以及其他的一些基本常识,我们可以将它们用函数依赖形式表示出来,它们是:

S#→Sn

S#→Sd

S#→Ss

Ss→Sd

(S#,C#)→G

因此,这个关系模式的有关信息可写成为:

SCG'({S#,Sn,Sd,Ss,C#,G},{ S#→Sn,S#→Sd,S#→Ss, Ss S#→Sd, (S#,C# ) →G}

关系模式有了函数依赖后就可以讨论规范化的问题了关系中的每一级范式均提出了关系模式所要遵循的约束条件,目的是为了使得关系模式具有较少异常性与较小的冗余度,即是说使关系模式更"好"一些

下面讨论第二范式

定义8-9 设有R(U)∈lNF且其每个非主属性完全函数赖于关键字,则称R(U)满足第二范式(可简写为2NF)或写为R∈2NF

实际上并不是每个满足第一范式的关系模式必满足第二式,如前面例子中的关系模式SCG'即不满足第二范式这是因在SCG'中,它的关键字是(S#,C#),而它的非主属性集是:

(Sd,G,Sn,Ss)

虽然我们有:

(S#,C#) G

但是Sn,Sd,Ss均并不完全依赖(S#,C#),因此不满足第二范式的条件

一个关系模式若满足第二范式,则它必须具有较少异常与较小冗余度因此,一个关系模式若仅满足第一范式还不够,它必须满足第二范式,其方法是将一个关系模式分解成几个关系模式,使分解后的关系模式能满足第二范式如关系模式SCG'可分解成两个关系模式,它们是:

SCG'l ({S#,C#,G},{( S#,C#)→G})

SCG'2 ({S#,Sn,Sd,Ss},{S#→Sn,S#→Sd,S#→Ss→Sd})

这两个模式SCG'均可用图8-1所示的示意图表示之

模式SCG'I与SCG'2均满足第二范式,它们均有较少异常与较小冗余度,而SCG'l还可以做到无插人与删除异常的出现,而SCG'由于不满足第二范式,因此插入异常,删除异常均有存在,且数据冗余度也很大关于这方面的验证请读者自己去做

(a) SCG'示意图 (b)SCG'1及SCG'2示意图

图8-1 三个关系模式函数依赖示意图

但是,第二范式还不能完全避免异常现象的出现,如SCG'2虽满足第二范式,但仍会出现插入异常与删除异常如在SCG'2中,它有如表8-4所示的模式

表8-4 SCG'2的关系模式

S#

Sn

Sd

Ss

SCG'2:

在这个模式中,如果我们要登记一个尚未招生的系的专业设置情况,要插入这个情况在模式中是较为困难的这样,如果要删除一些学生,有可能会将有关系的专业设置情况一起删除究其原因,不外是因为Sd既函数依赖于S#又函数依赖于Ss,同时Ss又函数依赖于S#,并且由此引起了传递函数依赖的出现因此,看来要消除异常现象,必须使关系模式中无传递函数依赖现象出现,这样就产生了第三范式

第三范式要求关系模式首先得满足第二范式,同时每个非主属性都非传递依赖于关键字由此可以看出,如满足第三范式则每个非主属性既不部分依赖也不传递依赖于关键字

定义8-10 若关系模式R(U)的每个非主属性都不部分依赖也不传递依赖于关键字,则称R满足第三范式(可简写为3NF),并记作R∈3NF

第三范式将关系模式中的属性分成为两类,一类是非主属性集,另一类是主属性集,而非主属性集的每个属性均完全,不传递依赖于主属性集中的关键字,从而做到在关系模式中理顺了复杂的依赖关系,使依赖单一化与标准化,进而力求达到避免异常性的出现,其示意图可见图8-2,在图中可将关系模式比拟成一个原子,其中主属性集是这个原子的原子核,而非主属性集中的属性则是这个原子中的电子,它们紧紧依赖于主属性集构成一个紧密整体

一个关系模式如果不满足第三范式,可以通过模式分解使分解成若干个模式,使分解后的模式能满足第三范式例如关系模式SCG'中,SCG'2满足第二范式,但不满足第三范式,此时可将其分解成下面两个模式:

SCG'21(S#,Sn,Ss)

SCG'22 (Ss,Sd)

图8-2 第三范式的"原子"模型

其依赖示意图见图8-3

(a)SCC'l (b)SCG'21 (c)SCG'22

图8-3模解分解图

在SCG'中经过几次分解后,得到三个关系模式:

SCG'l,SCG'21,SCG'22

这三个模式均满足第三范式且没有异常现象出现,同时冗余度小

1972年Boyce,Codd等从另一个角度研究了范式,发现了函数依赖中的决定因素与关键字间的联系与范式有关,从而创立了另一种第三范式,称为Boyce-Codd范式

Boyce-Codd范式的大概意思是:如果关系模式中,每个决定因素都是关键字,则满足Boyce-Codd范式我们知道,一般而言,每个函数依赖中的决定因素不一定都是关键字,因此,只有当R中决定因素都是关键字时才能认为满足Boyce-Codd范式

定义8-1l 如R(U )中X,Y(U,假定满足R∈lNF,且若X→Y(Y(X)时X必含关键字,则称R满足Boyce-Codd范式(可简记BCNF)并记以R∈BCNF

下面一个问题我们需要研究BCNF与3NF间究竟有什么关系 经过仔细研究后,我们认为BCNF比3NF更为严格下面的定理给出了这个回答

定理8-1关系模式R(U)若满足BCNF,则必定满足3NF

这个定理的证明请读者设法自行证得(注:可以用BCNF及3NF的定义而求得)

这个定理告诉我们:一关系模式满足BCNF者必满足3NF但是,一关系模式满足3NF是否满足BCNF呢 即是说,定理8-1的充分条件是否成立呢 回答是否定的,即必存在一R(U)满足3NF,但不满足BCNF,这只要用一例即可说明

例8-1设有关系模式R(S, C,T),其中S, C含义同前, T表示教师,R有下列语义信息: (1)每个教师仅上一门课;

(2)学生与课程确定后,教师即唯一确定

这样,R就有如下函数依赖关系:

(S, C ) →T

T→C

这个关系模式满足3NF,因为它的主属性集为(S,C )非主属性集为 (T ),而T完全依赖于(S,C )且不存在传递依赖但这个关系模式不满足BCNF,因为T是决定因素,但T不是关键字

这个模式的示意图见图8-4

图8一4 例8一1示意图

从这个例子中也可以看出,实际上第三范式也避免不了异常性,如某课程本学期不开设,因此就无学生选读,此时有关教师固定开设某课程的信息就无法表示因此,要避免此种异常性,还需要进一步将关系模式分解成BCNF如在此例中可将R进一步分解成:

R1 (S, T )

R2 (T, C )

其示意图如图8-5所示而R1, R 2则为BCNF,这两个模式均不会产生异常现象

R1 R 2

图8-5 R分解成两个BCNF

从上面所述可以看出,BCNF比3NF更为严格,它将关系模式中的属性分成两类,一类是决定因素集,另一类是非决定因素集非决定因素集中的属性均完全,不传递地依赖于决定因素集中的每个决定因素关于这种比喻的一个示意图见图8-6

到此为止,由函数依赖所引起的异常现象,只要分解成BCNF即可获得解决在BCNF中每个关系模式内部的函数依赖均比较单一和有规则,它们紧密依赖而构成一个整体,从而可以避免异现象出现以及冗余量过多的现象

图8-6 BCNF的原子模型

823 多值依赖与第四范式

我们研究了函数依赖及与它有关的几个范式,但是否关系模式内属性间的依赖关系除函数依赖外就没有其他依赖关系呢 事实并不如此,函数依赖关系是一种较为明显的依赖关系,但是随着人们对关系模式了解越来越深刻后,发现尚有另外的一些依赖系存在,多值依赖就是其中的一种我们先举一个例子,以说明多值依赖的存在

例8-2设有一个课程关系C,它可用表8-5表示此表表示高等数学这门课的任课教师可以有3个,它的参考书可以有2本;普通物理这门课的任课教师也可以有3个,它的参考书可以有3本如用关系的形式表示,见表8-6

表8-5 关系C的示意图

课程名C

教师名T

选用参考书L

高等数学

李华民

王天华

林 静

高等数学

高等数学教程

普通物理

吴铁钢

谢晓芳

徐秋芳

物理学

普通物理

普通物理基础

表8-6 C的关系

C

T

L

高等数学

李华民

高等数学

高等数学

李华民

高等数学教程

高等数学

王天华

高等数学

高等数学

王天华

高等数学教程

高等数学

林 静

高等数学

高等数学

林 静

高等数学教程

普通物理

吴铁钢

物理学

普通物理

吴铁钢

普通物理

普通物理

吴铁钢

普通物理基础

普通物理

谢晓芳

物理学

普通物理

谢晓芳

普通物理

普通物理

谢晓芳

普通物理基础

普通物理

徐秋芳

物理学

普通物理

徐秋芳

普通物理

普通物理

徐秋芳

普通物理基础

从这个关系中可以看出两点

(1 ) 这个关系的数据冗余很大

(2 ) 这个关系的属性间有一种有别于函数依赖的依赖关系存在

我们仔细分析这种特殊依赖关系后发现它有两个特点:

(1)设如R(U)中X与Y有这种依赖关系,则当X的值一经确定后可以有一组Y值与之对应如确定C为高等数学,则有一组T的值:李华民,王天华,林静与之对应同样C与L也有类似的依赖

(2 ) 当X的值一经确定后,其所对应的一组Y值与U一X一Y无关如在C中,对应高等数学课的一组教师与此课程的参考书毫无关系,这就表示C与T有这种依赖,则T的值的确定与U一C一T= L无关

上述这种依赖显然不是函数依赖,我们称之为多值依赖(multi-valued dependency),如Y多值依赖于X,则可记为X→→Y

从上面所描述的多值依赖X→→Y的特点看,其第一个特点表示X与Y的对应关系是很随便的,X的一个值所对应的Y值的个数可不作任何强制性规定,即Y的值可以是从0到任意多个,其主要起强制性约束的是第二个条件,即X所对应的Y取值与U一X一Y无关,说得确切些,如有R(U)且如存在X→→Y,则对R(U)的任何一个关系R,如有元组s,t∈R,有s[X]=t[X](表示s与t在X的投影相等),如将它们在U一X一Y的投影(记为s[U一X一Y], t [U一X一Y],交换后所得元组称为u, v则必有u, v∈R

关于这个情况可以用表8-7表示

表8-7多值依赖示意图

X

Y

U-X-Y

s s [X]

t t [X]

s [Y]

t [Y]

s[U-X-Y]

t[U-X-Y]

s [X]

t [X]

s [Y]

t [Y]

t[U-X-Y]

s[U-X-Y]

…………

…………

…………

…………

…………

…………

对多值依赖有了充分了解后,我们可对它定义如下:

定义8-12 设R(U)中有X,Y(U,若对R(U)的任何一个关系,对X的一个确定值,存在Y的一组值与之对应,且Y的这组值又与Z=U一X一Y中的属性值不相关,此时称Y多值依赖于X,并记为X→→Y

在多值依赖中若X→→Y且Z=U一X一Y≠O,则称X→→Y为非平凡多值依赖,否则称为平凡多值依赖

多值依赖可有下面的一些性质:

(1) 在R(U)中如有X→→Y,则必有X→→U一X一Y

(2) 在R(U)中如有X→Y,则必有X→→Y

读者要注意,我们在R(U)中讨论多值依赖时并不意味着R(U)中已不需要讨论函数依赖

了,恰恰相反,我们一般不仅要在R(U)找出所有多值依赖关系来,而且还要找出所有的函数依赖关系来因此,一个完整的R(U)应该包含一个函数依赖集F'以及一个多值依赖集F',它可以用R(U, F,F')表示

前面已经讲过,具有多值依赖的关系,它们的数据冗余量特别大,如何设法减少数据冗余呢 从例8-2中的关系C中可以看出,如果将C(C, T, L)分解成两个关系C1,C2后,它们的冗余度会明显下降

C1 (C,T )

C2 (C,L )

C1,C2这两个关系可用表8-8表示

表8-8关系C分解成关系C1和C2

C

T

高等数学

高等数学

高等数学

普通物理

普通物理

普通物理

李华民

王天华

林 静

吴铁钢

谢晓芳

徐秋芳

C

L

高等数学

高等数学

普通物理

普通物理

普通物理

普通物理

高等数学

高等效学教程

物理学

普通物理

普通物理基础

(a) 关系C1 (b) 关系C2

从表8-8可以看到,数据冗余的减少是极其明显的

从多值依赖的观点看,在C1,C2中各对应一个多值依赖C→→T与C→→L,它们都是平凡多值依赖因此,在多值依赖时,减少数据冗余的方法是使关系分解成为仅有平凡多值依赖

这样,我们就可以规定一个比BCNF更高的范式,它叫第四范式,可简记为4NF这个范式的特点是,在关系模式中它必须满足:

(1) 只允许出现平凡多值依赖(不允许出现非平凡多值依赖);

(2) 函数依赖要满足BCNF

由于函数依赖是多值依赖的特例,因此统一可以用多值依赖概念定义第四范式

定义8-13 R(U)中如果X→→Y是非平凡多值依赖,则X:必含有关键字,此时称R满足第四范式,并记作R∈4NF

由这个第四范式定义可以看出,前面所定义的关系C,它虽是BCNF,但不是4NF,因为在C(C, T )中有:

C→→T

C→→L

而它的关键字是(C,T,L)

虽然C∈BCNF,但C不是关键字,所以C(4NF对它作分解后所产生的C1及C2显然因为C1(C,T)有C→→T,故不存在非平凡多值依赖,因此有C1∈4NF,同理有C2∈4NF

824 小 结

我们在规范化讨论中定义了五个范式,对这些范式的认识是逐步深入的总的说来,我们可以总结成下面几点:

(1) 规范化的目的:解决插入,修改异常以及数据冗余度高

(2) 规范化的方法:从模式中各属性间的依赖关系(函数依依赖及多值依赖)入手,尽量做到每个模式表示客观世界中的一个"事物"

(3) 规范化的实现手段:用模式分解的方法

实际上从第一范式到第四范式的过程是一个不断消除一些依赖关系中的弊病的过程图8-7给出了这个过程

读者应注意的是:规范化是一种理论,它研究如何通过规范以解决异常与冗余现象,在实际数据库设计中构作关系模式时需要考虑到这个因素但是,客观世界是复杂的,在构作模式时尚需考虑到其他的多种因素,如模式分解过多,势必在数据查询时要用到较多的联结运算,这样就会影响查询速度因此,在实际构作模式中,需要综合多种正反因素,统一权衡利弊得失,最后构做出一个较为适合实际的模式来

图8-7 规范化的过程

83 规范化所引起的一些问题

由规范化而引起了对一些问题的进一步研究,它们是:

1函数依赖理论的研究

属性间的函数依赖与多值依赖是规范化的基本依据,因此有必要对它们作进一步研究,这些研究包括:

(1)可由关系模式上的一些函数依赖通过一些公理系统(叫Armstrong公理)而获得关系模式上的所有函数依赖由此可知:一个关系模式上的所有函数依赖可由两部分组成:基础部分是直接由语义获取,其他部分可由公理系统推演而得

(2)引入了函数依赖集的等价概念与最小函数依赖集,即如果两函数依赖集能推演出相同的集来,则称它们是等价的,而等价的函数依赖集之最小者称为最小函数依赖集

这些研究为规范化提供了更多的基础信息

2模式分解的研究

规范化的实施主要依靠不断地进行模式分解在模式分解中需要研究下列问题:

(1)分解后关系中的信息是否会丢失 这叫无损联接性(lossless join)

(2)分解后关系中的函数依赖是否会丢失 这叫依赖保持性

(3)在满足无损联接性与依赖保持性下可分解到第几范式

经过研究我们可以得到下面几个事实:

若要求满足无损联接性,则模式分解一定可以达到BCNF

若要求满足依赖保持性,则模式分解一定可以达到3NF,但不一定能达到BCNF

若既要求满足无损联接性又要求满足依赖保持性,则模式分解一定可以达到

3NF,但 不一定能达到BCNF

上述三点均可通过三个算法获得实现

由于规范化所引起的这两个问题的研究的详细探讨均比较复杂,故本书中不拟详述,仅将结果陈述于上,供读者参考

习 题 8

1请给出下列术语的含义:

函数依赖;(2)关键字;(3)主属性集;(4)多值依赖;(5)2NF;(6)3NF;

(7)BCNF;(8)4NF

2在关系SC(S#, C#, G)中S#((C#正确吗 请说明其理由

3是不是规范化最佳的模式结构是最好的结构 为什么

4试证明若R(BCNF,则必有R(3NF

5试问下列关系模式最高属第几范式,并解释其原因

R (A, B, C, D),F: {B(D, AB(C};

R (A, B, C),F: {A(B, B(A, A(C};

R (A, B, C, D),F: {A(C, D(B};

R (A, B, C, D),F: {A(C, CD(B}

s

t

f

p

f

p

p

f

f

f

f

p

p

f

G

S#

C#

Sd

Ss

Sn

S#

C#

G

S#

Sd

Ss

Sn

非主属性集N

主属性集p

K1

K2

K3

K4

S#

c#

G

S#

Sn

Ss

Ss

Sd

S

C

T

C

T

T

S

非决定因素

决定

因素

R:

消除决定因素非关键字的非平凡多值依赖

1NF

消除非主属性对关键字的部分依赖

2NF

消除非主属性对关键字的传递依赖

3NF

消除主属性对关键字的部分与传递依赖

BCNF

消除非平凡且非函数依赖的多值依赖

4NF

是c

在关系数据库逻辑设计的时候我们要考虑的一个问题就是:如何构造一个适合于某一具体问题的数据模式。这就牵扯到数据库逻辑设计的工具——关系数据库的规范化理论。

关系模式的规范化就是根据一个关系属性间不同的依赖情况来区分其为第一,第二,第三,和第四范式,然后用直观的描述将具有不合适性质的关系转换为更合适的形式。

以上就是关于离散数学的等价关系全部的内容,包括:离散数学的等价关系、MySQL数据库服务器逐渐变慢 该怎么分析与解决、在线.等..关系数据库规范化理论等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9547844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存