關(guān)系模型和關(guān)系運(yùn)算_第1頁
關(guān)系模型和關(guān)系運(yùn)算_第2頁
關(guān)系模型和關(guān)系運(yùn)算_第3頁
關(guān)系模型和關(guān)系運(yùn)算_第4頁
關(guān)系模型和關(guān)系運(yùn)算_第5頁
已閱讀5頁,還剩137頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第3章

關(guān)系模型和關(guān)系運(yùn)算定西廣播電視大學(xué)肖武德本章要點(diǎn) 理解關(guān)系模型的基本概念。 將用對(duì)象定義語言或?qū)嶓w-聯(lián)系模型為數(shù)據(jù)庫所建模型轉(zhuǎn)換成需要的關(guān)系模型。 熟練掌握關(guān)系代數(shù)語言的使用,并掌握關(guān)系演算語言和關(guān)系邏輯語言的使用。教學(xué)要求理解:關(guān)系模型的基本概念。熟練掌握:ODL設(shè)計(jì)轉(zhuǎn)換為關(guān)系設(shè)計(jì)。熟練掌握:E/R圖設(shè)計(jì)轉(zhuǎn)換為關(guān)系設(shè)計(jì)。熟練掌握:用關(guān)系代數(shù)表達(dá)式表達(dá)查詢要求?;菊莆眨河藐P(guān)系演算表達(dá)式表達(dá)查詢要求?;菊莆眨河藐P(guān)系邏輯表達(dá)式(數(shù)據(jù)邏輯規(guī)則)表達(dá)查詢要求。3.1關(guān)系模型的基本概念關(guān)系模型用一種稱為“關(guān)系”的二維表來表示數(shù)據(jù)。3.1.1屬性:

屬性是關(guān)系的標(biāo)題欄中各列的名字。屬性描述了該列各數(shù)據(jù)項(xiàng)的含義。3.1.2模式:關(guān)系的名稱和關(guān)系的屬性集稱為關(guān)系的“模式”。

Student(StudentNo,

StudentName,Age,Dept)

在關(guān)系模型中,數(shù)據(jù)庫設(shè)計(jì)包含一個(gè)或多個(gè)關(guān)系模式,我們將所設(shè)計(jì)的關(guān)系模式的集合稱為“關(guān)系數(shù)據(jù)庫模式”,或者簡稱為“數(shù)據(jù)庫模式”。3.1.3元組

除了關(guān)系的標(biāo)題欄以外,其他各行統(tǒng)稱“元組”。 元組的各分量分別對(duì)應(yīng)于關(guān)系的各個(gè)屬性。

(990011,李明,19,計(jì)算機(jī)系)。 通常一個(gè)元組就表示一個(gè)對(duì)象,而元組所屬的關(guān)系就表示對(duì)象所屬的類。StudentNoStudentNameAgeDept9900011李明19計(jì)算機(jī)系9900548高亮亮20自動(dòng)化系9900203方平18外語系圖3.13.1.5關(guān)系的等價(jià)表示法 關(guān)系的模式和元組都是集合,而不是列表,因此它們的順序是無關(guān)緊要的,我們可以重新排列關(guān)系的行和列,而關(guān)系并不改變。 通常都為關(guān)系選擇一個(gè)“標(biāo)準(zhǔn)”的屬性順序。 我們把給定關(guān)系中元組的集合稱為該關(guān)系的“實(shí)例”。P習(xí)題1如果某關(guān)系的實(shí)例滿足下列條件之一,要表示該實(shí)例,有多少種不同的方法(考慮元組的順序和屬性的順序)。解:(1)(2)(3)m個(gè)屬性可有m!種不同的排列順序,n個(gè)元組可有n!種不同的排列順序,因此共有m!*n!種不同的排列順序。

3.2從ODL設(shè)計(jì)到關(guān)系設(shè)計(jì)3.2.1從ODL屬性到關(guān)系屬性

假設(shè)類的所有特性都是屬性,而不是聯(lián)系或者方法;并且屬性都是原子類型,而不是結(jié)構(gòu)、集合、數(shù)組等類型。 類的每個(gè)屬性對(duì)應(yīng)于該關(guān)系的一個(gè)屬性。StudentNoStudentNameAgeDept9900011李明19計(jì)算機(jī)系9900548高亮亮20自動(dòng)化系9900203方平18外語系下面的關(guān)系就是一個(gè)滿足條件的例子3.2.2類中的非原子屬性

假設(shè)ODL中的屬性可能是復(fù)雜的數(shù)據(jù)類型,比如結(jié)構(gòu)、集合等,而關(guān)系模型要求關(guān)系的屬性必須是原子類型。 結(jié)構(gòu)的每個(gè)域?qū)?yīng)于關(guān)系的一個(gè)屬性。 如果屬性是多個(gè)值的集合,可以針對(duì)每個(gè)值建立一個(gè)元組。InterfaceStudent{attributeintegerStudentNo;attributestructNameType{stringFirst,stringLast}StudentName;attributeintegerAge;attributestringDpat;}3.2.3單值聯(lián)系的表示interfaceMovie{attributestringTitle;attributeintegerYear;

relationship

Set<Actor>actorsinverseActor::movies;

relationshipStudioownedbyinverseStudio::owns;}單值聯(lián)系的表示(續(xù))interfaceStudio{ attributestringName; attributestringAddress;

relationship

Set<Movie>owns inverseMovie::ownedby; }

只要建立相關(guān)類中構(gòu)成鍵碼的屬性集就可以表示相關(guān)類的對(duì)象了。 假設(shè)公司名Name是類Studio的鍵碼,那么我們?cè)陉P(guān)系Movie的模式中設(shè)計(jì)一個(gè)表示所屬制片公司名的屬性StudioName,關(guān)系Movie如下所示。TitleYearLengthFilmTypeStudioName

星球大戰(zhàn)

1977124Color??怂?/p>

大力士

1991104Color迪斯尼

3.2.4多值聯(lián)系的表示為了表示多值聯(lián)系,要結(jié)合如下兩種方法:首先,和單值聯(lián)系一樣,要找出表示每個(gè)相關(guān)對(duì)象的鍵碼;其次,和表示集合類型的屬性一樣,為相關(guān)對(duì)象集合的每個(gè)元素建立一個(gè)元組。

Movie類到Actor類的聯(lián)系actors是多值聯(lián)系,Actor類的ODL描述如下: interfaceActor{ attributestringName; attributeintegerYear;

relationship Set<Movie>movies inverse Movie::actors; }TitleYearStudioName

ActorName

星球大戰(zhàn)

1977??怂?/p>

哈里森.福特

星球大戰(zhàn)

1977??怂?/p>

凱瑞.菲歇爾

星球大戰(zhàn)

1977??怂?/p>

馬克.哈米爾

大力士

1991迪斯尼

3.2.5聯(lián)系與反向聯(lián)系的表示

聯(lián)系及其反向聯(lián)系中的任何一個(gè)都包含了另一個(gè)的全部信息,所以我們完全可以保留其中一個(gè),刪除另一個(gè)。3.2.6ODL子類的表示將ODL子類轉(zhuǎn)換成關(guān)系模式:

每個(gè)子類都對(duì)應(yīng)于一個(gè)關(guān)系

這個(gè)關(guān)系用相應(yīng)子類的所有特 性(包括從超類繼承下來的全 部特性)來表示

P37習(xí)題5設(shè)計(jì)一個(gè)適合大學(xué)選課的數(shù)據(jù)庫。該數(shù)據(jù)庫應(yīng)包括學(xué)生、系、教師、課程,哪個(gè)學(xué)生選了哪門課,哪個(gè)教師教哪門課,學(xué)生的成績,一個(gè)系提供哪些課程等信息。用ODL進(jìn)行描述,注意為屬性和聯(lián)系選擇適當(dāng)?shù)念愋?,并指出每個(gè)類的鍵碼。P67習(xí)題3將第二章習(xí)題5的ODL設(shè)計(jì)轉(zhuǎn)換成關(guān)系數(shù)據(jù)庫模式。interfaceStudent(keySNo){ attributeintegerSNo;attributestringSN;attributeintegerScore;RelationshipSet<Course>courses1inverseCourse::students1;relationshipDepartdepart1inverseDepart::students2; };interfaceTeacher(keyTNo){ attributeintegerTNo;attributestringTN;relationshipSet<Course>courses2inverseCourse::teachers; };interfaceDepart(keyDNo,DN){ attributeintegerDNo;attributestringDN;relationshipSet<student>students2inverseStudent::depart1;relatianshipSet<Course>courses3inverseCourse::deprt2; }interfaceCourse(keyCNO){ attributeintegerCNo;attributestringCN;reletionshipSet<Student>students1 inversestudent::courses1;relationshipSet<Teacher>teachers inverseTeacher::courses2;relationshipDepartdepart2inverseDepart::courses3;};

E/R圖與ODL主要有以下區(qū)別: 1.聯(lián)系在E/R圖中獨(dú)立存在,在ODL中作為特性嵌套在類定義中。 2.屬性在ODL中可能是任意的聚集類型;在E/R圖中,允許使用結(jié)構(gòu)化的數(shù)據(jù),而不允許使用集合或者其他聚集類型的數(shù)據(jù)。 3.在E/R圖中,聯(lián)系可以具有屬性。3.3從E/R圖到關(guān)系設(shè)計(jì)實(shí)體集Course對(duì)應(yīng)的關(guān)系如下所示:CourseNoCourseNameTeacher1234程序設(shè)計(jì)

張明

5678數(shù)據(jù)庫

張明

0463操作系統(tǒng)

許來華

3.3.1實(shí)體集到關(guān)系的轉(zhuǎn)換StudentNoStudentNameAgeDept9900011李明19計(jì)算機(jī)系9900548高亮亮20自動(dòng)化系9900203方平18外語系實(shí)體集Student對(duì)應(yīng)的關(guān)系如下所示:3.3.2E/R聯(lián)系到關(guān)系的轉(zhuǎn)換

E/R圖中的聯(lián)系也可用關(guān)系表示: 一、聯(lián)系R所涉及到的每個(gè)實(shí)體集的鍵碼屬性(集) 二、R本身的屬性.

StudentNoCourseNoScore990011123489990054567890

多向聯(lián)系轉(zhuǎn)換為關(guān)系也特別容易。在將R轉(zhuǎn)換為關(guān)系的時(shí)候,只要讓R的屬性包括與其相關(guān)的所有實(shí)體集的鍵碼屬性(集)和它本身的屬性即可。 不為“isa”聯(lián)系建立相應(yīng)的關(guān)系,而是把“isa”聯(lián)系隱含在這樣的事實(shí)里,即與“isa”聯(lián)系有關(guān)的實(shí)體集都具有相同的鍵碼。 此時(shí),關(guān)系Movie的模式仍然為:

Movie(Title,Year,StudioName,ActorName)

關(guān)系Murder的模式為:

Murder(Title,Year, Weapon)3.3.3“屬于”聯(lián)系到關(guān)系的轉(zhuǎn)換

P37習(xí)題6用E/R模型表達(dá)習(xí)題5的學(xué)生選課數(shù)據(jù)庫。SNoCNoSNScoreCNStudentCourseBelongTeachSupplyDepartTeacherDNoDNTNoTNoChooseDNoStudent(SNo,SN,Score)Depart(DNo,DN)Teacher(TNo,TN)Course(CNo,CN)Belong(SNo,DNo)Teach(TNo,CNo)Choose(SNo,CNo)Supply(DNo,CNo)P67習(xí)題4圖3.23表示的是一個(gè)航空公司的E/R圖,試將其轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫模式。NoDateNameBookingCustomerflightSeatKindnumberAddressCustomer(No,Name,Address)Flight(Number,Date,Kind)Booking(No,Number,Date,Seat)3.4關(guān)系代數(shù) 關(guān)系代數(shù)是一種抽象的查詢語言,通過對(duì)關(guān)系的運(yùn)算來表達(dá)查詢。 關(guān)系代數(shù)的運(yùn)算對(duì)象是關(guān)系,運(yùn)算結(jié)果也是關(guān)系。 1.

普通的集合運(yùn)算 并、交、差 2.

刪除一部分關(guān)系的運(yùn)算 選擇運(yùn)算“σ”會(huì)刪除某些行 投影運(yùn)算“π”會(huì)刪除某些列關(guān)系代數(shù)運(yùn)算可以分為四類:3.

合并兩個(gè)關(guān)系的運(yùn)算 “笛卡兒積”運(yùn)算把兩個(gè)關(guān)系的元組以所有可能的方式組合起來. “連接”運(yùn)算有選擇地從兩個(gè)關(guān)系取 出元組組合在一起4.

改名運(yùn)算 不改變關(guān)系的元組,只改變關(guān)系的模式:改變屬性的名字或者關(guān)系本身的名字3.4.1關(guān)系的集合運(yùn)算 三種最普通的集合運(yùn)算:并、交和差: (1)R∪S,R和S的并,它是R中的元素和S中的元素共同組成的集合。

RSR∪SRS(2)R∩S,R和S的交,它是既出現(xiàn)在R中又出現(xiàn)在S中的元素組成的集合。

R∩SRS(3)R―S,R和S的差,它是只在R中出現(xiàn),不在S中出現(xiàn)的元素組成的集合。R―SRS

要想對(duì)兩個(gè)關(guān)系R和S進(jìn)行上述運(yùn)算,R和S必須滿足如下條件:

l

R和S的模式具有相同的屬性集 l 在對(duì)R和S進(jìn)行集合運(yùn)算之前, 要對(duì)R和S的屬性列進(jìn)行排序,保 證兩個(gè)關(guān)系的屬性順序相同StudentNoStudentNameAgeDept990011李明

19計(jì)算機(jī)

900548高亮亮

20自動(dòng)化

關(guān)系R關(guān)系SStudentNoStudentNameAgeDept990011李明

19計(jì)算機(jī)

990203方平

18外語

并集R∪S:StudentNoStudentNameAge

Dept990011李明

19計(jì)算機(jī)

990548高亮亮

20自動(dòng)化

990203方平

18外語

交集R∩S:StudentNoStudentNameAge

Dept990011李明19計(jì)算機(jī)差集R―S:

StudentNoStudentNameAgeDept900548高亮亮

20自動(dòng)化

3.4.2投影

投影運(yùn)算符是π,該運(yùn)算作用于關(guān)系R將產(chǎn)生一個(gè)新關(guān)系S,S只具有R的某幾個(gè)屬性列。投影運(yùn)算的一般表達(dá)式如下: S=πA1,A2,…,An(R) S是投影運(yùn)算產(chǎn)生的新關(guān)系,它只具有R的屬性A1,A2,…,An所對(duì)應(yīng)的列。 現(xiàn)在考慮一下學(xué)生關(guān)系Student,它的當(dāng)前實(shí)例如下:StudentNoStudentNameAge

Dept990011李明

19計(jì)算機(jī)

990548高亮亮

20自動(dòng)化

990203方平

18外語

πStudentNo,StudentName(Student):

StudentNo(學(xué)號(hào))

StudentName(姓名)

9900011李明

9900548高亮亮

9900203方平

3.4.3選擇 選擇運(yùn)算符是σ,該運(yùn)算符作用于關(guān)系R也將產(chǎn)生一個(gè)新關(guān)系S,S的元組集合是R的一個(gè)滿足某條件C的子集。選擇運(yùn)算的一般表達(dá)式為: S=σC(R) S的模式與R的模式完全相同。 C是我們所熟悉的條件表達(dá)式。仍然用上面的例子,那么作如下運(yùn)算:

σAge>18(Student)

應(yīng)該是:

StudentNoStudentNameAgeDept990011李明

19計(jì)算機(jī)

900548高亮亮

20自動(dòng)化

查詢計(jì)算機(jī)系年齡大于18的學(xué)生資料,可以用如下表達(dá)式:

σAge>18AND Dept=“計(jì)算機(jī)系” (Student)

StudentNoStudentNameAgeDept990011李明

19計(jì)算機(jī)

3.4.4笛卡爾積

兩個(gè)關(guān)系R和S的笛卡爾積記作R╳S,它的關(guān)系模式是R和S的模式的并集。 R╳S是把R和S的元組以所有可能的方式組合起來,因此,R╳S擁有的元組數(shù)量應(yīng)該是R的元組數(shù)與S的元組數(shù)的乘積。

假設(shè)關(guān)系R有兩個(gè)屬性,分別是A和B;關(guān)系S有三個(gè)屬性,分別是B、C和D。R的當(dāng)前實(shí)例有兩個(gè)元組,S的當(dāng)前實(shí)例有三個(gè)元組:ABalbn關(guān)系R

BCDfghlxynpx關(guān)系S

在關(guān)系R╳S中,關(guān)系模式應(yīng)有五個(gè)屬性:A、R.B、S.B、C和D,R╳S有六個(gè)元組:AR.BS.BCDalfghallxyalnpxbnfghbnlxybnnpx3.4.5自然連接

兩個(gè)關(guān)系R和S的自然連接,記作 RS,得到的關(guān)系模式是R和S模式的并集。 RS的元組是:假設(shè)A1,A2,…,An是R和S的模式中的公共屬性,那么如果R的元組r和S的元組s在這些屬性上取值都相同,r和s組合而成的元組就歸入RS中。

例如,對(duì)上例中的兩個(gè)關(guān)系R和S,它們的自然連接應(yīng)該是:ABCDalxybnpx3.4.6θ連接兩個(gè)關(guān)系R和S基于條件C的θ連接用RcS表示,它是這樣得到的:先作R和S的笛卡爾積,然后從R╳S的元組中選擇滿足條件C的元組集合。

RR.B≠S.BS其結(jié)果應(yīng)該是:

AR.BS.BCDAlfghAlnpxBnfghBnlxy3.4.7改名

運(yùn)算ρS(A1,A2,…,An)(R)用來把關(guān)系R改名為關(guān)系S,同時(shí)把關(guān)系S的屬性從左至右依次命名為A1,A2,…,An。

假如我們只想改變關(guān)系名,不想改變關(guān)系模式中的屬性名,那么用如下形式 ρS(R)

ρS(X,C,D)(S)

這樣,改名后的笛卡爾積

R╳ρS(X,C,D)(S)其結(jié)果如下圖所示:ABXCDalfghallxyalnpxbnfghbnlxybnnpx3.4.8復(fù)合運(yùn)算

假定我們現(xiàn)在想查詢計(jì)算機(jī)系年齡大于18歲的學(xué)生的學(xué)號(hào)和姓名:

πStudentNo,StudentName(σAge>18 ANDDept=“計(jì)算機(jī)系”(Student))StudentNoStudentName9900011李明StudentNoCourseNoScore9900011123489990054856787399005480463909900548123482

查詢成績超過80分的學(xué)生姓名(只要有一門課的成績超過80分即可),可用如下表達(dá)式:πStudentName(σScore>80(Student SC))

StudentName李明高亮亮3.4.9基本運(yùn)算和導(dǎo)出運(yùn)算

交集可以用集合差的形式表達(dá): R∩S=R―(R―S)

R∩SRSR–(R-S)RSR-S除了交、θ連接、自然連接這三種可由其他運(yùn)算導(dǎo)出的運(yùn)算之外,另外六種運(yùn)算——并、差、選擇、投影、笛卡爾積和改名都是基本運(yùn)算,每一種都不能由另外五種運(yùn)算導(dǎo)出。P67習(xí)題5結(jié)合學(xué)生選課數(shù)據(jù)庫,用關(guān)系代數(shù)進(jìn)行一下查詢:(1)學(xué)號(hào)為9900111的學(xué)生的系別和年齡;(2)有不及格(成績<60)學(xué)生的課程名;(3)計(jì)算機(jī)系有不及格課程的學(xué)生名單;(4)學(xué)生張林的“數(shù)據(jù)庫原理”課成績。解:假設(shè)學(xué)生選課數(shù)據(jù)庫關(guān)系模式如下:

Student(SNo,SName,SAge,SDept)Course(CNo,CName)SC(SNo,CNo,Score)(1)

πSDept,Sage(σSNO=9900111(Student))(2)

πCname(σscore<60(SC)Course)(3)

πSName(σscore<60(SC)(σSDept=’計(jì)算機(jī)系’(Student))(4)πScore(σSName=‘張林’(Student)

SC(σCName=’數(shù)據(jù)庫原理’(Course)))模擬試題8圖書管理數(shù)據(jù)庫關(guān)系模型如下:圖書B(書號(hào)BN,書名T,作者A,出版社P)學(xué)生S(姓名N,班級(jí)C,借書證號(hào)LN)借書L(LN,BN,日期D)

查詢:2001.1.1(20010101)以前借書的學(xué)生姓名和書名。 求:1)以笛卡爾積為基礎(chǔ)表達(dá)查詢要求; 2)畫出原始語法樹; 3)畫出優(yōu)化語法樹。 (12分)解:1)π

N,T(σD=20010101(S×L×B))2)

π

N,Tσ

D=20010101××BSL3)σL.BN=B.BNπ

N,T×π

BN,Nπ

BN,Tσ

L.LN=S.LNBσ

D=20010101π

LN,NSL×3.5關(guān)系演算

關(guān)系演算分類元組關(guān)系演算 以元組為變量域關(guān)系演算 以域?yàn)樽兞吭M關(guān)系演算表達(dá)式的一般形式

{t|φ(t)} 其中t為元組變量,φ(t)是以元組變量t為基礎(chǔ)的公式。

3.5.1元組關(guān)系演算

1.

原子公式是公式; 2.

假如φ1(t)和φ2(t)是公式,那么¬φ1,φ1∧φ2,φ1∨φ2也都是公式,它們?yōu)檎娴臈l件分別是:“φ1非真”,“φ1和φ2皆為真”,“φ1與φ2中至少有一個(gè)為真”;公式是遞歸定義的:

3.假如φ是公式,那么()(φ)和()(φ)也都是公式,它們?yōu)檎娴臈l件分別是:“至少有1個(gè)元組t使得φ為真”,“所有的元組t都使φ為真”。其中為存在量詞,為全稱量詞。若在變量前加上量詞,則變量為約束變量。 4. 只有按上述三個(gè)規(guī)則的有限次組合形成的才是公式。原子公式

1.R(t),R(t)表示t是關(guān)系R的一個(gè)元組;2.,其中t和s是元組變量,是算術(shù)比較運(yùn)算符(如>、=等),表示元組t的第i個(gè)分量與元組s的第j個(gè)分量滿足關(guān)系,3.t[i]C或Ct[i],其中C表示一個(gè)常量,其他含義同上。t[i]C表示t的第i個(gè)分量與常量C滿足關(guān)系,例如t[1]<8表示t的第1個(gè)分量小于8。

在關(guān)系演算公式中,各種運(yùn)算符的優(yōu)先級(jí)如下:

算術(shù)比較運(yùn)算符優(yōu)先級(jí)最高;量詞優(yōu)先級(jí)次之,且存在優(yōu)先級(jí)高于全稱;邏輯運(yùn)算符優(yōu)先級(jí)最低,且¬的優(yōu)先級(jí)高于∧,∧的優(yōu)先級(jí)高在于∨;若加括號(hào),則括號(hào)內(nèi)優(yōu)先。

1.交 R∩S用{t|R(t)∧S(t)}表示。2.并 R∪S用{t|R(t)∨S(t)}表示。3.差 R―S用{t|R(t)∧¬S(t)}表示。

4.選擇

σC(R)用{t|R(t)∧C’}表示。 其中C’是C的等價(jià)條件,只是把C中的屬性名在C’中換成t[i]的形式,i代表屬性對(duì)應(yīng)的是元組的第幾個(gè)分量。5.投影π

i1,i2,…,in(R)

={t(n)|(r)(R(r)∧t[1]=r[i1]∧t[2]=r[i2]∧…∧t[n]=r[in])} 其中n為投影后得到的元組t的分量數(shù),r[ij](j=1,2,…,n)代表元組t的屬性j所對(duì)應(yīng)的元組r的相應(yīng)分量。例如,要查詢學(xué)生的姓名和所在系,用關(guān)系代數(shù)表達(dá)如下:

πStudentName,Dept(Student)而用元組關(guān)系演算表達(dá)式表示如下:{t(n)(s)(Student(s)∧t[1]=s[2]∧t[2]=s[4]}

6.笛卡爾積 R╳S用如下形式表示:{t(m+n)│(r(m))(S(n))(R(r)∧S(s)

t[1]=r[1]∧…∧t[m]=r[m])∧t[m+1]=s[1]∧…∧t[m+n]=s[n]}

其中R的屬性個(gè)數(shù)為m,S到屬性個(gè)數(shù)為n。假設(shè)R有兩個(gè)屬性,S有三個(gè)屬性,那么R×S可以用元組演算表達(dá)式表示如下:{t(2+3)│(r(2))(S(3))(R(r)∧S(s)

t[1]=r[1]∧t[2]=r[2]∧t[3]=s[1]∧t[4]=s[2]∧∧t[5]=s[3])}7.自然連接

自然連接的表示基本上與笛卡爾積相似,假設(shè)關(guān)系R為R(A,B),關(guān)系S為S(B,C,D),那么R與S的自然連接可以用關(guān)系演算表達(dá)式表示如下:

{t(2+3-1)|(r(2))(S(3))(R(r)∧S(s)∧t[1]=r[1]∧t[2]=s[1]∧t[3]=s[2]∧t[4]=s[3])}表達(dá)式中給出了自然連接后的新元組的分量個(gè)數(shù)為2+3-1,即原有的兩個(gè)關(guān)系屬性數(shù)之和減去公共屬性。8.θ連接

R(A,B)與S(B,C,D)的θ連接:

R

R.B≠S.B

S 可以用元組關(guān)系演算表達(dá)式表示如下:{t(2+3)|(r(2))(S(3))(R(r)∧S(s)∧t[1]=r[1]∧t[2]=r[2]∧t[3]=s[1]∧t[4]=s[2]∧t[5]=s[3])∧r[2]≠s[1]}}假設(shè)關(guān)系R、S如圖所示:AB1234(a)關(guān)系RAB1423(b)關(guān)系S{t|R(t)∨S(t)}AB12341423

{t|(s)(R(t)∧S(s)∧t[1]=s[1])}AB12{t|(u)(R(t)∧S(u)∧t[2]>u[1])}

AB343.5.2域關(guān)系演算域關(guān)系演算與元組演算非常相似,在域關(guān)系演算中,也有原子公式和公式等概念,不過顧名思義,元組關(guān)系演算表達(dá)式用的是元組變量,而域關(guān)系演算表達(dá)式用的是元組分量的變量,域變量的變化范圍是某個(gè)值域,而不是某個(gè)關(guān)系。域關(guān)系演算的原子公式有兩種:

R(x1,x2,…,xk),其中R是一個(gè)關(guān)系,它具有k個(gè)屬性,xi(i=1,2,…,k)是一個(gè)常量或者域變量。如果(x1,x2,…,xk)是R的一個(gè)元組,那么R(x1,x2,…,xk)為真。xθy,其中x和y是常量或者域變量,θ是算術(shù)比較運(yùn)算符(如>、=等等)。如果x和y滿足關(guān)系θ,則xθy為真。域關(guān)系演算表達(dá)式的一般形式是:

{x1,x2,…,xk|φ(x1,x2,…,xk)} 其中x1,x2,…,xk都是域變量,φ是公式。該表達(dá)式的含義是:使φ為真的域變量x1,x2,…,xk組成的元組的集合。假設(shè)元組關(guān)系演算表達(dá)式為{t|φ(t)},轉(zhuǎn)換成等價(jià)的域關(guān)系演算的方法如下:

1.如果t是有n個(gè)分量的元組變量,則為t的每個(gè)分量t[i]引進(jìn)一個(gè)域變量ti,用ti來替換公式中所有的t[i]。相應(yīng)的域關(guān)系演算表達(dá)式形式為{t1,t2,…,tn|φ(t1,t2,…,tn)}

2.出現(xiàn)存在量詞(u)或者全稱量詞(u)的時(shí)候,如果u是有m個(gè)分量的元組變量,則為u的每個(gè)變量u[i]引進(jìn)一個(gè)域變量ui,將量詞轄域內(nèi)所有的u用u1u2…um替換,所有的u[i]用ui來替換。例:查詢計(jì)算機(jī)系年齡為18歲的學(xué)生的元組演算表達(dá)式為:{t│Student(t)∧t[3]=18∧t[4]=“計(jì)算機(jī)系”}轉(zhuǎn)換為關(guān)系演算表達(dá)式如下:{t1t2t3t4│Student(t1t2t3t4)∧t3=18∧t4=“計(jì)算機(jī)系”}例:查詢有一門課成績超過80分的學(xué)生姓名,其元組演算表達(dá)式為:{t(1)│(u)(v)Student(u)∧SC(v)∧t[1]=u[2]∧u[1]=v[1]∧v[3]>80}轉(zhuǎn)換為關(guān)系演算表達(dá)式如下:{t1│(u1)(u2)(u3)(u4)(v1)(v2)(v3)Student(u1u2u3u4)∧SC(v1v2v3)∧t1=u2∧u1=v1∧v3>80}假設(shè)關(guān)系R、S如下圖:AB1234AB1423RS{xy|R(xy)∨S(xy)}AB12341423

{xy|()()(R(xy)∧S(uv)∧x=u)}

AB12{xy|()()(R(xy)∧S(uv)∧y>u)}

AB34以后,把存在量詞(u1)(u3)(u4)簡寫成(u1u2u3),把(v2)(v3)簡寫成(v1v2),使表達(dá)式進(jìn)一步簡化。P67習(xí)題5結(jié)合學(xué)生選課數(shù)據(jù)庫,用關(guān)系代數(shù)進(jìn)行一下查詢:(1)學(xué)號(hào)為9900111的學(xué)生的系別和年齡;(2)有不及格(成績<60)學(xué)生的課程名;(3)計(jì)算機(jī)系有不及格課程的學(xué)生名單;(4)學(xué)生張林的“數(shù)據(jù)庫原理”課成績。P67習(xí)題6分別用元組關(guān)系演算和域關(guān)系演算表示習(xí)題5中的查詢。(1)學(xué)號(hào)為9900111的學(xué)生的系別和年齡;用元組關(guān)系演算表示:用域關(guān)系演算表示:

(2)有不及格(成績<60)學(xué)生的課程名;用關(guān)系元組演算表示:用域關(guān)系演算表示:(3)計(jì)算機(jī)系有不及格課程的學(xué)生名單;用元組關(guān)系演算表示:用域關(guān)系演算表示:(4)學(xué)生張林的“數(shù)據(jù)庫原理”課成績。用元組關(guān)系演算表示:用域關(guān)系演算表示:模擬試題4已知關(guān)系R、S如下所示,求域演算表達(dá)式的結(jié)果。R A B C S D E F a c 5 4 d 8 b d 3 5 a 1 m e 4 3 e 2

(4分)解:

R1 X Y Z a c 5 b d 3 m e 4 4 d 8關(guān)系邏輯也是一種表達(dá)關(guān)系查詢的方法,凡是能用關(guān)系代數(shù)表達(dá)的查詢,都可以用關(guān)系邏輯來表達(dá)。本節(jié)將介紹一種邏輯查詢語言,稱為數(shù)據(jù)邏輯(Datalog),它是由一系列if-then規(guī)則組成的。

3.6關(guān)系邏輯

3.6.1謂詞和原子

在數(shù)據(jù)邏輯中,我們用一種稱為“謂詞”的符號(hào)來表示關(guān)系。每個(gè)謂詞都有固定數(shù)量的參數(shù),而謂詞及其隨后的參數(shù)合稱為原子。原子的語法類似于C++程序設(shè)計(jì)中的函數(shù)調(diào)用,而謂詞則類似于返回布爾值的函數(shù)名,其函數(shù)隨參數(shù)取值不同而為真或假。

例如P(X1,X2,…,Xn)就是一個(gè)由謂詞P和參數(shù)X1,X2,…,Xn組成的原子。假如P是以某種順序排列的n個(gè)屬性的關(guān)系,又假如(X1,X2,…,Xn)是P的一個(gè)元組,則關(guān)系原子P(X1,X2,…,Xn)的值為真,否則原子的值為假。假設(shè)R是如下的關(guān)系:那么,R(a,l)為真,R(b,n)也為真,而對(duì)于任何其他的x,y值,R(x,y)都為假。ABalbn有一種重要的原子——算術(shù)原子。算術(shù)原子是兩個(gè)算術(shù)表達(dá)式的比較,例如x+2≤y*z等等。算術(shù)原子和關(guān)系原子共同點(diǎn)是都可以以任意變量的值作為參數(shù),并且返回一個(gè)布爾值。

3.6.2規(guī)則和查詢

數(shù)據(jù)邏輯用“規(guī)則”描述關(guān)系代數(shù)中的運(yùn)算。一個(gè)規(guī)則通常由如下三部分組成:l

一個(gè)稱為頭部的關(guān)系原子一個(gè)符號(hào)←,通常讀作“if”(如果)由一個(gè)或多個(gè)原子組成的體,體中的原子稱為子目標(biāo)。

子目標(biāo)可以是關(guān)系原子,也可以是算術(shù)原子。各子目標(biāo)之間用AND連接。

例如,如下一個(gè)數(shù)據(jù)邏輯規(guī)則:

ComputerStudent(Sno,SSName)←Student(Sno,Sname,A,D)ANDD=“計(jì)算機(jī)系”可以用來查詢計(jì)算機(jī)系的學(xué)生的學(xué)號(hào)和姓名。它等效于關(guān)系代數(shù)中的

ComputerStudent=πStudentNo,StudentName

(σDept=“計(jì)算機(jī)系”(Student))3.6.3從關(guān)系代數(shù)到數(shù)據(jù)邏輯

數(shù)據(jù)邏輯表達(dá)查詢的能力和關(guān)系代數(shù)一樣強(qiáng)。每個(gè)關(guān)系代數(shù)的運(yùn)算符(交、并、差、投影等)都可以用一個(gè)或幾個(gè)數(shù)據(jù)邏輯規(guī)則來模擬。

用數(shù)據(jù)邏輯規(guī)則來模擬單個(gè)的關(guān)系代數(shù)運(yùn)算符。1.交 兩個(gè)關(guān)系的交集可以用一個(gè)規(guī)則來表示. 假設(shè)關(guān)系R和S均有三個(gè)屬性,它們的交可以用數(shù)據(jù)邏輯規(guī)則表示如下: I(a,b,c)←R(a,b,c)ANDS(a,b,c)

2.并 兩個(gè)關(guān)系的并集用兩個(gè)規(guī)則來表示. 仍然假設(shè)關(guān)系R和S均有三個(gè)屬性,則它們的并可以表示如下:U(a,b,c)←R(a,b,c)

U(x,y,z)←S(x,y,z)3.差

兩個(gè)關(guān)系的差可以用一個(gè)具有求反子目標(biāo)(前面有NOT的子目標(biāo))的規(guī)則來表示。

D(a,b,c)←R(a,b,c)ANDNOTS(a,b,c)D(a,b,c)RS4.選擇 假如選擇的條件C是一個(gè)算術(shù)比較或者多個(gè)算術(shù)比較的“與”,那么可以用一個(gè)規(guī)則來表示。

σAge>18ANDDept=“計(jì)算機(jī)系”(Student)

S(a,b,c,d)←Student(a,b,c,d) ANDc>18ANDd=“計(jì)算機(jī)系”σNOT(Age>18ANDDept=“計(jì)算機(jī)系”)(Student) 找出不是既大于18歲又屬于計(jì)算機(jī)系的學(xué)生。

利用德.摩爾根定律的一種形式,即AND的反等于反的OR(“與”的反等于反的“或”),把NOT推到表達(dá)式的內(nèi)層:σ(NOT(Age>18))OR(NOT(Dept=“計(jì)算機(jī)系”))(Student)在比較的內(nèi)部取反:σAge≤18ORDept≠“計(jì)算機(jī)系”(Student)最后,用兩個(gè)規(guī)則分別對(duì)應(yīng)OR兩邊的選擇條件,得到的規(guī)則如下:S(a,b,c,d)←Student(a,b,c,d)ANDc≤18 S(a,b,c,d)←Student(a,b,c,d)ANDd≠“計(jì)算機(jī)系”

5.投影 假定我們要把關(guān)系Student投影到兩個(gè)屬性——StudentName和Dept上,那么可以用如下規(guī)則表示: P(b,d)←Student(a,b,c,d)

6.笛卡爾積 假設(shè)關(guān)系R具有兩個(gè)屬性,關(guān)系S具有三個(gè)屬性,那么R╳S可以表示如下: M(a,b,x,y,z)←R(a,b)ANDS(x,y,z)7.自然連接 自然連接的表達(dá)與笛卡爾積有些相似,有兩點(diǎn)要注意:R和S中的公共屬性必須使用相同的變量,公共屬性所對(duì)應(yīng)的變量在頭部只出現(xiàn)一次。 關(guān)系R(A,B)和S(B,C,D)的自然連接可以表示如下: N(a,b,c,d)←R(a,b)ANDS(b,c,d)8.θ連接 由于同樣涉及到條件C,所以可以參考如何用數(shù)據(jù)邏輯規(guī)則來表示選擇。

例:R(A,B)和S(B,C,D)的θ連接

RR.B≠S.BS應(yīng)該用如下規(guī)則表示:J(a,rb,sb,c,d)←R(a,rb)ANDS(sb,c,d)ANDrb≠sb

9.復(fù)雜的關(guān)系代數(shù)表達(dá)式對(duì)于復(fù)雜的包含多種運(yùn)算的關(guān)系代數(shù),較為有條理的做法是為表達(dá)式建立一棵表達(dá)樹,將表達(dá)式分解為幾步只含有單一關(guān)系代數(shù)運(yùn)算符的運(yùn)算,隨后將每步運(yùn)算改寫成一個(gè)規(guī)則,得到一個(gè)輔助用的中間關(guān)系,最后得到的關(guān)系就是我們需要的查詢結(jié)果。例如,以下關(guān)系代數(shù)表達(dá)式:πStudentName(σScore>80(StudentStudentCouese))表達(dá)樹為:

StudentStudentCourseσScore>80πStudentName連接、選擇和投影:(1)A(Sno,Sname,A,D,Cno,S)←Student(Sno,Sname,A,D)ANDStudentCourse(Sno,Cno,S)(2)B(Sno,Sname,A,D,Cno,S)←A(Sno,Sname,A,D,Cno,S)ANDS>80(3)Result(Sname)←B(Sno,Sname,A,D,Cno,S)對(duì)這些規(guī)則作適當(dāng)簡化,例如用(1)的規(guī)則體替代(2)中的子目標(biāo)A,再用(2)的規(guī)則體替代(3)中的子目標(biāo)B,最終得到:Result(Sname)←

Student(Sno,Sname,A,D)ANDStudentCourse(Sno,Cno,S)

ANDS>80P67習(xí)題5結(jié)合學(xué)生選課數(shù)據(jù)庫,用關(guān)系代數(shù)進(jìn)行一下查詢:(1)學(xué)號(hào)為9900111的學(xué)生的系別和年齡;(2)有不及格(成績<60)學(xué)生的課程名;(3)計(jì)算機(jī)系有不及格課程的學(xué)生名單;(4)學(xué)生張林的“數(shù)據(jù)庫原理”課成績。P67習(xí)題6用數(shù)據(jù)邏輯規(guī)則表示習(xí)題5中的查詢。(1)學(xué)號(hào)為9900111的學(xué)生的系別和年齡;S(D,A)Student(SNO,SN,A,D)ANDSNO=9900111(2)有不及格(成績<60)學(xué)生的課程名;C(CN)Coures(CNo,CN)ANDSC(SNo,CNo,S)ANDS<60(3)計(jì)算機(jī)系有不及格課程的學(xué)生名單;S(SN)Student(SNo,SN,A,D)ANDSC(SNo,CNo,S)ANDD=‘計(jì)算機(jī)系’ANDS<60(4)學(xué)生張林的“數(shù)據(jù)庫原理”課成績。(4)U(S)Student(SNo,SN,A,D)ANDSC(SNo,CNo,S)ANDCoures(CNo,CN)ANDSN=‘張林’ANDCN=‘?dāng)?shù)據(jù)庫原理’

P67習(xí)題8畫出習(xí)題5中查詢(4)的關(guān)系代數(shù)表達(dá)樹。πScoreσSName=’張林’

σCName=’數(shù)據(jù)庫原理’

Student SC Course本章總結(jié)關(guān)系代數(shù)是一種抽象的查詢語言,通過對(duì)關(guān)系的運(yùn)算來表達(dá)查詢。關(guān)系代數(shù)的運(yùn)算對(duì)象是關(guān)系,運(yùn)算結(jié)果也是關(guān)系。通過將六種基本的運(yùn)算加以組合,可以構(gòu)造出非常復(fù)雜的關(guān)系運(yùn)算表達(dá)式,用戶希望對(duì)數(shù)據(jù)庫進(jìn)行的大部分操作都能用這些運(yùn)算的組合來完成。本章總結(jié)關(guān)系演算以數(shù)理邏輯中的謂詞演算為基礎(chǔ)。根據(jù)關(guān)系演算中變量的不同,可以將關(guān)系演算進(jìn)一步分為元組關(guān)系演算和域關(guān)系演算。本章還介紹了一種邏輯查詢語言,稱為數(shù)據(jù)邏輯(Datalog),它所包括的是一系列if-then規(guī)則。數(shù)據(jù)邏輯用一種稱為“謂詞”的符號(hào)來表示關(guān)系;用“規(guī)則”來描述關(guān)系代數(shù)中的各種運(yùn)算。

本章總結(jié)關(guān)系模型(RelationalModel):用稱為關(guān)系的二維表來表示數(shù)據(jù),其數(shù)據(jù)模型就稱為關(guān)系模型。模式(Schema)與實(shí)例(Instance):關(guān)系的名稱和屬性集總稱為關(guān)系的模式。關(guān)系模式的集合稱為關(guān)系數(shù)據(jù)庫模式。一個(gè)關(guān)系或關(guān)系集合所對(duì)應(yīng)的特定數(shù)據(jù)稱為該關(guān)系模式或該數(shù)據(jù)庫模式的實(shí)例。

本章總結(jié)ODL類轉(zhuǎn)換為關(guān)系:分為屬性和聯(lián)系兩方面的轉(zhuǎn)換。對(duì)于原子類型的屬性,類的每個(gè)屬性對(duì)應(yīng)于關(guān)系的一個(gè)屬性。對(duì)于非原子屬性,若為結(jié)構(gòu),則把結(jié)構(gòu)中的每個(gè)元素作為關(guān)系的一個(gè)屬性;若為集合,則按元素的個(gè)數(shù)把相關(guān)的一個(gè)元組擴(kuò)展為多個(gè)元組;若為數(shù)組,則按元素的個(gè)數(shù)既可擴(kuò)展為多個(gè)元組,也可擴(kuò)展為多個(gè)屬性。本章總結(jié)ODL中聯(lián)系的轉(zhuǎn)換:若為單值聯(lián)系,則把相關(guān)類中構(gòu)成鍵碼的屬性(集)作為關(guān)系的附加屬性(集)即可。若為多值聯(lián)系,如為集合類型,那么,首先,把相關(guān)類的鍵碼屬性(集)作為關(guān)系的附加屬性(集);其次,為相關(guān)對(duì)象集合的每個(gè)元素建立一個(gè)關(guān)系元組。對(duì)于聯(lián)系與反向聯(lián)系,常用的方法是將其獨(dú)立出來作為一個(gè)新的關(guān)系。本章總結(jié)實(shí)體集與聯(lián)系轉(zhuǎn)換為關(guān)系:實(shí)體集可直接轉(zhuǎn)換為關(guān)系,實(shí)體集的每個(gè)屬性都對(duì)應(yīng)于關(guān)系中的一個(gè)屬性。E/R圖中的聯(lián)系轉(zhuǎn)換為關(guān)系時(shí),其屬性由兩部分組成:與該聯(lián)系有關(guān)的每個(gè)實(shí)體集的鍵碼屬性(集);該聯(lián)系本身的屬性。

本章總結(jié)子類結(jié)構(gòu)到關(guān)系的轉(zhuǎn)換:一種方法是為每個(gè)子類建立一個(gè)關(guān)系,而關(guān)系中含有子類及其超類

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論