数据库系统工程师03关系模型.docx

上传人:b****6 文档编号:4686667 上传时间:2022-12-07 格式:DOCX 页数:19 大小:142.10KB
下载 相关 举报
数据库系统工程师03关系模型.docx_第1页
第1页 / 共19页
数据库系统工程师03关系模型.docx_第2页
第2页 / 共19页
数据库系统工程师03关系模型.docx_第3页
第3页 / 共19页
数据库系统工程师03关系模型.docx_第4页
第4页 / 共19页
数据库系统工程师03关系模型.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据库系统工程师03关系模型.docx

《数据库系统工程师03关系模型.docx》由会员分享,可在线阅读,更多相关《数据库系统工程师03关系模型.docx(19页珍藏版)》请在冰豆网上搜索。

数据库系统工程师03关系模型.docx

数据库系统工程师03关系模型

第三章关系模型(逻辑结构设计)

关系理论是建立在集合代数理论基础上的,有着坚实的数学基础。

E.F.Codd于70年代初提出关系数据理论,他因此获得1981年的ACM图灵奖。

早期代表系统:

SystemR:

由IBM研制。

INGRES由加州Berkeley分校研制。

目前主流的商业数据库系统:

Oracle,Informix,Sybase,SQLServer,DB2,

Access,Foxpro,Foxbase。

3.1关系基本概念

关系理论是以集合代数为基础的。

3.1.1域(Domain):

一组值的集合,这组值具有相同的数据类型。

如整数的集合、字符串的集合、全体学生的集合。

用D表示。

3.1.2笛卡尔积(Car’tesianProduct)

一组域D1,D2,…,Dn的笛卡尔积为:

D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,…,n}。

笛卡尔积的每个元素(d1,d2,…,dn)称作一个n元组(n-tuple)。

元组的每一个值di叫做一个分量(component)。

若Di为有限集,其基数为mi(i=1,2,3…n),则笛卡尔积的基数为

笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中每列对应一个域。

例:

D1为教师集合(T)={t1,t2}

D2为学生集合(S)={s1,s2,s3}

D3为课程集合(C)={c1,c2}

则D1×D2×D3是个三元组集合,元组个数为2×3×2,是所有可能的(教师,学生,课程)元组集合。

笛卡尔积可表为二维表的形式:

T

S

C

t1

s1

c1

t1

s1

c2

t1

s2

c1

t2

s3

c2

表中的行表示一个元组,列表示一个域。

3.1.3关系

(1)笛卡尔积D1×D2×…×Dn的子集叫做在域D1,D2,…,Dn上的关系,用R(D1,D2,…,Dn)表示。

(2)R是关系的名字,n是关系的度或目。

(3)关系是笛卡尔积中有意义的子集。

关系也可以表示为二维表。

T

S

C(属性)

t1

s1

c1

(元组)t1

s2

c2

t2

s3

c1

(4)关系的性质:

列是同质的,即每一列中的分量来自同一域,是同一类型的数据。

如TEACH(T,S,C)={(t1,s1,c1),(t1,t2,c1)}是错误的。

(5)不同的列可来自同一域,每列必须有不同的属性名。

如P={t1,t2,s1,s2,s3},C={c1,c2},则TEACH不能写成TEACH(P,P,C),还应写成TEACH(T,S,C)。

(6)行列的顺序无关紧要。

任意两个元组不能完全相同(集合内不能有相同的两个元素)。

每一分量必须是不可再分的数据。

满足这一条件的关系称作满足第一范式(1NF)的。

3.2关系模式

数据结构:

单一的数据结构——关系。

实体集、联系都表示成关系。

DEPT(D#,DN,DEAN)

S(S#,SN,SEX,AGE,D#)

C(C#,CN,CREDIT)

PROF(P#,PN,D#,SAL)

SC(S#,C#,SCORE)

TEACH(P#,C#)

3.2.1候选码(CandidateKey)

关系中的某一属性或属性组的值能唯一地标识一个元组,称该属性或属性组为候选码

如DEPT中的D#,DN都可作为候选码。

任何一个候选码中的属性称作主属性。

如SC中的S#,C#。

3.2.2主码(PrimaryKey)

进行数据库设计时,从一个关系的多个候选码中选定一个作为主码。

如可选定D#作为DEPT的主码。

3.3.3外部码(ForeignKey)

关系R中的一个属性组,它不是R的码,但它与另一个关系S的码相对应,则称这个属性组为R的外部码。

如S关系中的D#属性。

3.3.4关系模式

关系的描述称作关系模式,包括关系名、关系中的属性名、属性向域的映象、属性间的数据依赖关系等,记作R(A1,A2,…,An)。

属性向域的映象一般直接说明为属性的类型、长度等。

某一时刻对应某个关系模式的内容(元组的集合)称作关系。

关系模式是型,是稳定的。

关系是某一时刻的值,是随时间不断变化的。

3.3.5关系数据库

其型是关系模式的集合,即数据库描述,称作数据库的内涵(Intension)。

其值是某一时刻关系的集合,称作数据库的外延(Extension)。

3.3.6关系操作

关系操作是集合操作,操作的对象及结果都是集合,是一次一集合(Set-at-a-time)的方式,而非关系型的数据操作方式是一次一记录(Record-at-a-time)。

关系操作可以用关系代数和关系演算两种方式来表示,它们是相互等价的。

如用关系代数来表示关系的操作,可以有选择、投影、连接、除、交、差、并等。

3.3.7关系模式的完整性

(1)实体完整性:

A、关系的主码中的属性值不能为空值。

B、空值:

不知道或无意义。

C、意义:

关系对应到现实世界中的实体集,元组对应到实体,实体是相互可区分的,通过主码来唯一标识,若主码为空,则出现不可标识的实体,这是不容许的。

(2)参照完整性:

A、如果关系R2的外部码Fk与关系R1的主码Pk相对应,则R2中的每一个元组的Fk值或者等于R1中某个元组的Pk值,或者为空值。

B、意义:

如果关系R2的某个元组t2参照了关系R1的某个元组t1,则t1必须存在。

(3)用户定义的完整性:

用户针对具体的应用环境定义的完整性约束条件。

如S#要求是8位整数,SEX要求取值为“男”或“女”。

(4)系统支持

A、实体完整性和参照完整性由系统自动支持。

B、系统应提供定义和检验用户定义的完整性的机制。

 

3.3关系数据语言概述

3.3.1抽象的查询语言

(1)关系代数:

用对关系的运算来表达查询,需要指明所用操作。

(2)关系演算:

用谓词来表达查询,只需描述所需信息的特性。

元组关系演算:

谓词变元的基本对象是元组变量。

域关系演算:

谓词变元的基本对象是域变量。

3.3.2具体系统中的实际语言

SQL:

介于关系代数和关系演算之间,由IBM公司在研制SystemR时提出的。

QUEL:

基于Codd提出的元组关系演算语言ALPHA,在INGRES上实现。

QBE:

基于域关系演算,由IBM公司研制。

3.3.3关系数据语言的特点

(1)一体化:

一般关系系统的数据语言都同时具有数据定义、数据操纵和数据控制语言,而不是分为几个语言。

对象单一,都是关系,因此操作符也单一。

而非关系型系统,如DBTG,有对记录的操作,有对系的操作。

(2)非过程化:

用户只需提出“做什么”,无须说明“怎么做”,存取路径的选择和操作过程由系统自动完成。

(3)面向集合的存取方式:

操作对象是一个或多个关系,结果是一个新的关系(一次一关系)。

非关系系统是一次一记录的方式。

3.4关系代数

3.4.1关系代数

(1)基本运算

A、一元运算:

选择、投影、更名。

B、多元运算:

广义笛卡儿积、并、集合差。

(2)其它运算:

集合交、自然连接、除、赋值。

(3)扩展运算:

广义投影、外连接、聚集。

(4)修改操作:

插入、删除、更新。

3.4.2一些标记

给定关系模式R(A1,A2,…,An),设R是它的一个具体的关系,tR是关系的一个元组。

分量:

设tR,则t[Ai]表示元组t中相应于属性Ai的一个分量。

属性列:

A={Ai1,Ai2,…,Aik}{A1,A2,…,An},称A为属性列或域列。

t[Ai]=(t[Ai1],t[Ai2],…,t[Aik])。

3.4.3选择

(1)基本定义:

在关系R中选择满足给定条件的元组(从行的角度)。

F(R)={t|tR,F(t)=‘真’}

F是选择的条件,tR,F(t)要么为真,要么为假。

(2)F的形式:

由逻辑运算符连接算术表达式而成。

逻辑表达式:

(与),(或),(非)

算术表达式:

XY

X,Y是属性名、常量、或简单函数。

是比较算符,{,,,,,≠}

例:

找年龄不小于20的男学生。

AGE≥20∧SEX=‘male’(S)

3.4.4投影

(1)定义:

从关系R中取若干列组成新的关系(从列的角度)。

A(R)={t[A]|tR},AR

投影的结果中要去掉相同的行。

例:

A

B

C

D

a

B

c

d

e

F

g

h

i

B

c

l

B,C(R)

结果是:

例:

找001号学生所选修的课程号:

C#(S#=001(SC))

3.4.5并运算

(1)定义:

所有至少出现在两个关系中之一的元组集合。

RUS={r|rRvrS}

(2)两个关系R和S若进行并运算,则它们必须是相容的:

A、关系R和S必须是同元的,即它们的属性数目必须相同。

B、对i,R的第i个属性的域必须和S的第i个属性的域相同。

例:

求选修了001号或002号课程的学生号。

方案1:

∏S#(C#=001vC#=002(SC))

方案2:

∏S#(C#=001(SC))∪∏S#(C#=002(SC))

3.4.6差运算

(1)定义:

所有出现在一个关系而不在另一关系中的元组集合。

RS={r|rRrS}

R和S必须是相容的。

例:

求选修了001号而没有选002号课程的学生号。

∏S#(C#=001(SC))-∏S#(C#=002(SC))

3.4.8更名运算

(1)定义:

给一个关系表达式赋予名字x(E)

返回表达式E的结果,并把名字x赋给E。

x(A1,A2,,An)(E)

返回表达式E的结果,并把名字x赋给E,同时将各属性更名为A1,A2,..An。

关系被看作一个最小的关系代数表达式,可以将更名运算施加到关系上,得到具有不同名字的同一关系。

这在同一关系多次参与同一运算时很有帮助。

3.4.7广义笛卡尔积运算

(1)元组的连串(Concatenation):

若r=(r1,…,rn),s=(s1,…,sm),则定义r与s的连串为:

rs=(r1,…,rn,s1,…,sm)

(2)定义:

两个关系R,S,其度分别为n,m,则它们的笛卡尔积是所有这样的元组集合:

元组的前n个分量是R中的一个元组,后m个分量是S中的一个元组。

RS={rs|rRsS}

RS的度为R与S的度之和,RS的元组个数为R和S的元组个数的乘积。

例:

求数学成绩比王红同学高的学生姓名。

∏S.姓名(R.成绩S.成绩R.课程=数学S.课程=数学R.姓名=王红(RS(R))

姓名

课程

成绩

张三

物理

93

王红

数学

86

张三

数学

89

R.姓名

R.课程

R.成绩

S.姓名

S.课程

S.成绩

王红

数学

86

张三

物理

93

王红

数学

86

王红

数学

86

王红

数学

86

张三

数学

89

3.4.8交运算

(1)定义:

所有同时出现在两个关系中的元组集合。

RS={r|rRrS}

交运算可以通过差运算来重写:

RS=R(RS)

例:

求选修了001号和002号课程的学生号。

∏S#(C#=001(SC))∩∏S#(C#=002(SC))

3.4.9连接

(1)定义:

从两个关系的广义笛卡儿积中选取给定属性间满足一定条件的元组。

AB

RS={rs|rRsSr[A]S[B]}

为算术比较符,为等号时称为等值连接,为>时,为大于连接,为<时,为小于连接。

例:

R

A

B

C

1

2

3

4

5

6

7

8

9

S

D

E

3

1

6

2

RS

B

A

B

C

D

E

1

2

3

3

1

1

2

3

6

2

4

5

6

6

2

例:

求数学成绩比王红同学高的学生。

∏S.姓名((课程=数学姓名=王红(R))(课程=数学S(R)))

R.成绩

(2)自然连接:

从两个关系的广义笛卡尔积中选取在相同属性列B上取值相等的元组,并去掉重复的列。

RS={rs[B]|rRsSr[B]=S[B]}

自然连接与等值连接的不同:

自然连接中相等的分量必须是相同的属性组,并且要在结果中去掉重复的属性,而等值连接则不必。

例:

求001号学生所在系的名称。

∏DN(S#=001(S)DEPT)

(3)当R与S无相同属性时,RS=R×S。

3.4.10除运算

(1)除运算

给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。

R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。

R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:

元组在X上分量值x的象集YX包含S在Y上投影的集合:

记做:

R÷S={tr[Z]|trR∏y(S)

YX}

其中YX为x在R中的象集,x=tr[Z]。

例:

R

A

B

C

a1

b1

c2

a2

b3

c7

a3

b4

c6

a1

b2

c3

a4

b6

c6

a2

b2

c3

a1

b2

c1

S

B

C

D

b1

c2

d1

b2

c1

d1

b2

C1

d2

(1)象集(ImageSet)

关系R(X,Z),X,Z是属性组,x是X上的取值,定义x在R中的象集为:

Zx={t[Z]|tRt[X]=x}

从R中选出在X上取值为x的元组,去掉X上的分量,只留Z上的分量。

XZ

姓名

课程

张三

物理

王红

数学

张三

数学

x=张三

Zx

课程

物理

数学

(2)除运算

例:

3.4.11赋值运算

为使查询表达简单、清晰,可以将一个复杂的关系代数表达式分成几个部分,每一部分都赋予一个临时关系变量,该变量可被看作关系而在后面的表达式中使用。

临时关系变量关系代数表达式。

赋值给临时关系变量只是一种结果的传递,而赋值给永久关系则意味着对数据库的修改。

例:

RS=X(R)X(X(R)Y(S)R)用赋值重写为:

temp1X(R),

temp2X(temp1Y(S)R)

resulttemp1temp2

例:

求选修了其选修课为001号课程的学生名。

(哪个效率高?

方案1:

∏SN(PC#=001(SCCS))

方案2:

∏SN(PC#=001(C)SCS))

例:

求未选修001号课程的学生号。

(哪些正确?

方案1:

∏S#(C#≠001(SC))

方案2:

∏S#(S)-∏S#(C#=001(SC))

例:

求仅选修了001号课程的学生号。

选修001号课程的学生-仅选001号课程之外的学生

=∏S#(C#=001(SC))-∏S#(SC-C#=001(SC))

=∏S#(C#=001(SC))-∏S#(C#≠001(SC))

3.4.12广义投影

(1)定义:

在投影列表中使用算术表达式来对投影进行扩展。

F1,F2,…,Fn(E)F1,F2,…,Fn是算术表达式。

例:

求教工应缴纳的所得税。

P#,SAL*5/100(PROF)

p#,INCOME-TAX(P#,SAL*5/100(PROF))

3.4.13外连接

(1)定义:

为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接。

外连接=自然连接+失配的元组

(2)外连接的形式:

左外连接、右外连接、全外连接。

左外连接=自然连接+左侧表中失配的元组。

右外连接=自然连接+右侧表中失配的元组。

全外连接=自然连接+两侧表中失配的元组。

例:

列出所有老师的有关信息,包括姓名、工资、所教授的课程。

3.4.14聚集函数

(1)定义:

求一组值的统计信息,返回单一值。

使用聚集的集合可以是多重集,即一个值可以重复出现多次。

如果想去除重复值,可以用连接符‘-’将‘distinct’附加在聚集函数名后,如sum-distinct。

A、sum:

求和:

求全体教工的总工资。

sumSAL((PROF))

求001号学生的总成绩。

sumSCORE(S#=001(SC))

B、avg:

求平均:

求001号同学选修课程的平均成绩。

AvgSCORE(S#=001(SC))

C、count:

计数:

求001号同学选修的课程数。

countC#(S#=001(SC))

求任课老师的总数。

count-distinctP#(PC)

D、max:

求最大值。

min:

求最小值。

求学生选修数学的最高成绩。

MaxSCORE(CN=数学(C)SC))

(2)分组

将一个元组集合分为若干个组,在每个分组上使用聚集函数。

属性下标G聚集函数属性下标(关系)

分组运算G的一般形式

G1,G2,...,GnGF1,A1,F2,A2,…,Fm,Am(E)

Gi是用于分组的属性,Fi是聚集函数,Ai是属性名。

G将E分为若干组,满足:

A、同一组中所有元组在G1,G2,...,Gn上的值相同。

B、不同组中元组在G1,G2,...,Gn上的值不同。

例:

求每位学生的总成绩和平均成绩。

S#GsumSCORE,avgSCORE(SC)

3.4.15数据库修改

(1)删除

将满足条件的元组从关系中删除。

rrE

是对永久关系的赋值运算。

例:

删除001号老师所担任的课程。

PCPCPC#=001(PC)

删除没有选课的学生。

SS(∏S#(S)∏S#(SC))S

(2)插入

插入一个指定的元组,或者插入一个查询结果。

rrE

例:

新加入一个老师

PCPC{(P07,“周正”,750,D08)}

加入计算机系学生选修“数学”的信息。

SCSC∏S#(SDN=计算机系(DEPT))∏C#(CN=数学(C))

(3)更新

利用广义投影改变元组的某些属性上的值。

rF1,F2,…,Fn(r)

例:

给每位老师上调10%的工资。

PROCP#,PN,SALSAL*1.1,D#(PROC)

对工资超过800的老师征收5%所得税。

PC(P#,PN,SALSAL*0.95,D#(SAL800(PC)))∪(P#,PN,SAL,D#(SAL800(PC))

3.5视图

3.5.1定义

视图是命名的、从基本表中导出的虚表,它在物理上并不存在,存在的只是它的定义。

视图中的数据是从基本表中导出的,每次对视图查询都要重新计算。

createviewview_nameas<查询表达式>

视图之上可以再定义视图。

视图Vs临时关系变量。

例:

给出老师所教授课程的信息。

createviewp_courseas∏PN,CN(PROFPCC)

给出李明老师所教授的课程名称。

PN=李明(p_course)

3.5.2视图更新

(1)信息缺失

createviewp_salaryas∏PN,SAL(PROF)

p_salaryp_salary∪{(李明,800)}

往PROF中加入元组(李明,800),缺P#信息。

(2)信息歧义

createviewp_deanas∏PN,DEAN(PROFDEPT)

p_deanPN,DEAN王之(PN=李明(p_dean))

是将李明所在系的系主任改为王之呢,还是将李明调到王之任系主任的系中?

(3)实体化视图

a)视图的计算结果被实际存储起来。

b)优点:

查询迅速。

c)缺点:

一致性维护。

d)应用场合:

数据仓库。

(4)视图的优点

a)个性化服务:

简化了用户观点,使不同用户可以从不同角度观察同一数据。

b)安全性:

“知必所需”,限制用户数据的访问范围。

c)逻辑独立性:

视图作为基本表与外模式之间的映象。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1