關(guān)系模型與關(guān)系代數(shù)_第1頁(yè)
關(guān)系模型與關(guān)系代數(shù)_第2頁(yè)
關(guān)系模型與關(guān)系代數(shù)_第3頁(yè)
關(guān)系模型與關(guān)系代數(shù)_第4頁(yè)
關(guān)系模型與關(guān)系代數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第2章 關(guān)系模型與關(guān)系代數(shù)數(shù)據(jù)庫(kù)系統(tǒng)原理與設(shè)計(jì)目 錄 關(guān)系模型2.1關(guān)系代數(shù)2.2關(guān)系模型系統(tǒng)而嚴(yán)格地提出關(guān)系模型的是美國(guó)IBM公司的E.F.Codd 1970年提出關(guān)系數(shù)據(jù)模型E.F.Codd, “A Relational Model of Data for Large SharedData Banks”, Communication of the ACM,1970關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)是支持關(guān)系數(shù)據(jù)模型的數(shù)據(jù)庫(kù)系統(tǒng)。關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)是當(dāng)今的主流數(shù)據(jù)庫(kù)管理系統(tǒng)。關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束三部分組成。關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)非常簡(jiǎn)單,它就是二維表,亦稱為關(guān)系 。

2、關(guān)系數(shù)據(jù)庫(kù)是表的集合,即關(guān)系的集合。 表是一個(gè)實(shí)體集,一行就是一個(gè)實(shí)體,它由共同表示一個(gè)實(shí)體的有關(guān)聯(lián)的若干屬性的值所構(gòu)成。由于一個(gè)表是這種有關(guān)聯(lián)的值的集合(即行的集合),而表這個(gè)概念和數(shù)學(xué)上的關(guān)系概念密切相關(guān),因此稱為關(guān)系模型。關(guān)系模型中,現(xiàn)實(shí)世界的實(shí)體以及實(shí)體間的各種聯(lián)系都是用關(guān)系來(lái)表示。關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系數(shù)據(jù)結(jié)構(gòu)的形式化定義域是一組具有相同數(shù)據(jù)類型的值的集合。 笛卡爾積給定一組域D1, D2, , Dn,它們之中可以有相同的域。D1, D2, , Dn的笛卡爾積為: D1D2Dn = (d1, d2, , dn)diDi, i=1, 2, , n其中,集合中的每一個(gè)元素(d1, d2, ,

3、dn)稱為一個(gè)n元組, 簡(jiǎn)稱為元組;元素中的每一個(gè)值di稱為一個(gè)分量。若Di (i=1, 2, , n)為有限集,假設(shè)其基數(shù)為mi (i=1, 2, , n),則D1D2Dn的基數(shù)M為: 舉例:給定兩個(gè)域:學(xué)生的姓名集合:D1 = 李小勇, 劉方晨, 王紅敏課程的名稱集合:D2 = 數(shù)據(jù)庫(kù)系統(tǒng)概論, 操作系統(tǒng)則D1, D2的笛卡爾積為: D1D2= (李小勇, 數(shù)據(jù)庫(kù)系統(tǒng)概論), (李小勇, 操作系統(tǒng)), (劉方晨, 數(shù)據(jù)庫(kù)系統(tǒng)概論), (劉方晨, 操作系統(tǒng)), (王紅敏, 數(shù)據(jù)庫(kù)系統(tǒng)概論), (王紅敏, 操作系統(tǒng)) 關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系數(shù)據(jù)結(jié)構(gòu)的形式化定義關(guān)系D1D2Dn的子集稱為在域D1, D

4、2, , Dn上的關(guān)系,表示為 : r(D1, D2, , Dn) 其中,r表示關(guān)系的名字,n是關(guān)系的目或度(degree)。當(dāng) n=1時(shí),稱該關(guān)系為單元關(guān)系;當(dāng)n=2時(shí),稱該關(guān)系為二元 關(guān)系。 關(guān)系是笛卡爾積的有限子集,所以關(guān)系也是一個(gè)二維表, 表的每行對(duì)應(yīng)于關(guān)系的一個(gè)元組,表的每列對(duì)應(yīng)于關(guān)系的一個(gè)域。由于域可以相同,為了區(qū)別就必須給每列起一個(gè)名字,稱為屬性(attribute)。n目關(guān)系共有n個(gè)屬性。 關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系數(shù)據(jù)結(jié)構(gòu)的形式化定義超碼:對(duì)于關(guān)系r的一個(gè)或多個(gè)屬性的集合A,如果屬性集A可以唯一地標(biāo)識(shí)關(guān)系r中的一個(gè)元組,則稱屬性集A為關(guān)系r的一個(gè)超碼(superkey) 。 候選碼:對(duì)

5、于關(guān)系r的一個(gè)或多個(gè)屬性的集合A,如果屬性集A的任意真子集都不能成為關(guān)系r的超碼,則稱屬性集A為候選碼(candidate key) 。主碼:若一個(gè)關(guān)系有多個(gè)候選碼,則可以選定其中的一個(gè)候選碼作為該關(guān)系的主碼 ??罩担核锌赡艿挠虻囊粋€(gè)取值,表明值未知或不存在。 如果某學(xué)生的speciality屬性值為null,則表示該學(xué)生還沒(méi)有明確所學(xué)專業(yè),或不知道他的所學(xué)專業(yè)。 舉例:Student關(guān)系studentNo studentName sex birthdayspeciality 0701001 李小勇 男 1990-12-21 計(jì)算機(jī)0701008 王 紅 男 1992-04-26 計(jì)算機(jī)08

6、02002 劉方晨 女 1990-11-11 信息系統(tǒng)0802005 王紅敏 女 1990-10-01 信息系統(tǒng)0703045 王 紅 男 1992-04-26 會(huì)計(jì)學(xué)0703010 李宏冰 女 1992-03-09 會(huì)計(jì)學(xué)超碼:studentNo,studentNo, studentName、studentNo, sex、 studentNo, studentName, speciality、 候選碼:studentNo 和 studentName, speciality 與語(yǔ)義有關(guān)主碼:studentNo關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系模式對(duì)于一個(gè)二維表,有表頭部分和表體部分,表頭部分定義了該表的結(jié)構(gòu),即

7、定義了該表由哪些列構(gòu)成(假設(shè)由n列構(gòu)成),每個(gè)列的名字和取值范圍等;表體就是所有數(shù)據(jù)行的集合,每一個(gè)數(shù)據(jù)行都是由表頭部分規(guī)定的n列有關(guān)聯(lián)的取值的集合構(gòu)成。 對(duì)應(yīng)于關(guān)系數(shù)據(jù)庫(kù),表的每一個(gè)數(shù)據(jù)行對(duì)應(yīng)于關(guān)系的一個(gè)元組,表體對(duì)應(yīng)于關(guān)系,關(guān)系是元組的集合,關(guān)系是值的概念;表頭部分對(duì)應(yīng)于關(guān)系模式,關(guān)系模式是型的概念,它定義了元組集合的結(jié)構(gòu),即定義了一個(gè)元組由哪些屬性構(gòu)成(假設(shè)由n個(gè)屬性構(gòu)成),每個(gè)屬性的名字和來(lái)自的域等.關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系模式關(guān)系的描述稱為關(guān)系模式(relation schema)。形式化地表示為:r(U, D, DOM, F) r為關(guān)系名,U為組成該關(guān)系的屬性名的集合,D為屬 性集U中所有

8、屬性所來(lái)自的域的集合,DOM為屬性向 域的映像集合,F(xiàn)為屬性間數(shù)據(jù)的依賴關(guān)系集合(即體 現(xiàn)一個(gè)元組的各屬性取值之間的“關(guān)聯(lián)”性)。關(guān)系模式通常被簡(jiǎn)記為 :r(U) 或 r(A1, A2, , An) r為關(guān)系名,U為屬性名的集合A1, A2, , An 關(guān)系數(shù)據(jù)結(jié)構(gòu)關(guān)系模式關(guān)系數(shù)據(jù)庫(kù)也有型和值之分,型就是關(guān)系數(shù)據(jù)庫(kù)模式,即它所包含的所有關(guān)系模式的集合;值就是這些關(guān)系模式在某一時(shí)刻所對(duì)應(yīng)的關(guān)系的集合,通常就稱為關(guān)系數(shù)據(jù)庫(kù)實(shí)例 。在實(shí)際應(yīng)用中,人們經(jīng)常把關(guān)系數(shù)據(jù)庫(kù)模式和關(guān)系數(shù)據(jù)庫(kù)實(shí)例都籠統(tǒng)地稱為關(guān)系數(shù)據(jù)庫(kù)。 舉例:學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)ScoreDB的模式 Class( classNo: char(6

9、), className: varchar(30), institute: varchar(30), grade: smallint, classNum: tinyint )Student( studentNo: char(7), studentName: varchar(20), sex: char(2), birthday: datetime, native: varchar(20), nation: varchar(30), classNo: char(6) )Course( courseNo: char(5), courseName: varchar(30), creditHour:

10、numeric, courseHour: int, priorCourse: char(5) )Score( studentNo: char(7), courseNo: char(5), term: char(5), score: numeric ) 說(shuō)明:基本數(shù)據(jù)類型請(qǐng)參見(jiàn)P112113關(guān)系完整性約束條件實(shí)體完整性若屬性集A是關(guān)系r的主碼,則A不能取空值null。 例如,關(guān)系Student,由于studentNo是關(guān)系Student的主碼,因此它在任何時(shí)候的取值都不能為空值null,但其他屬性如sex、birthday、speciality等都可以取空值,表示當(dāng)時(shí)該屬性的值未知或不存在。 如

11、果主碼是由若干個(gè)屬性的集合構(gòu)成,則要求構(gòu)成主碼的每一個(gè)屬性的值都不能取空值。 例如,學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)ScoreDB中的關(guān)系Score,它的主碼是studentNo, courseNo, term,因此這3個(gè)屬性都不能取空值。 關(guān)系完整性約束條件參照完整性設(shè)F是關(guān)系r的一個(gè)屬性(或?qū)傩约?,Ks是關(guān)系s的主碼。如果F與Ks相對(duì)應(yīng),則稱F是關(guān)系r參照關(guān)系s的外碼(foreign key),簡(jiǎn)稱F是關(guān)系r的外碼。并稱關(guān)系r為參照關(guān)系,關(guān)系s為被參照關(guān)系或目標(biāo)關(guān)系。 若屬性(或?qū)傩约?F是關(guān)系r的外碼,它與關(guān)系s的主碼Ks相對(duì)應(yīng),則對(duì)于關(guān)系r中的每一個(gè)元組在屬性F上的取值要么為空值null,要么等于

12、關(guān)系s中某個(gè)元組的主碼值。 關(guān)系完整性約束條件舉例: 多對(duì)一聯(lián)系的屬性引用 學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)ScoreDB中,學(xué)生關(guān)系Student與班級(jí)關(guān)系Class之間存在多對(duì)一的“歸屬”聯(lián)系。 多對(duì)多聯(lián)系的聯(lián)系關(guān)系及屬性引用 學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)ScoreDB中,假設(shè)每一個(gè)學(xué)生一個(gè)學(xué)期可以選修若干門課程,每一門課程同時(shí)有若干個(gè)學(xué)生選修,那么學(xué)生關(guān)系Student與課程關(guān)系Course之間存在多對(duì)多的“選修”聯(lián)系,且課程的開(kāi)課學(xué)期term和修讀成績(jī)score為聯(lián)系屬性。 關(guān)系內(nèi)部屬性間的引用聯(lián)系 學(xué)生成績(jī)管理數(shù)據(jù)庫(kù)ScoreDB中,假設(shè)一門課程可能存在先修課程,且關(guān)系Course中的priorCourse

13、屬性用來(lái)存放先修課程的課程編號(hào)。課程關(guān)系Course中的priorCourse屬性需要引用課程關(guān)系Course的主碼“課程編號(hào)”courseNo。 Class( classNo, className, institute, grade, classNum ) Student( studentNo, studentName, sex, birthday, native, nation, classNo )圖2-4 實(shí)現(xiàn)“多對(duì)一”聯(lián)系的屬性引用1n Student( studentNo, studentName, sex, birthday, native, nation, classNo ) S

14、core( studentNo, courseNo, term, score ) Course( courseNo, courseName, creditHour, courseHour, priorCourse )圖2-5 實(shí)現(xiàn)“多對(duì)多”聯(lián)系的聯(lián)系關(guān)系及屬性引用mnCourse( courseNo, courseName, creditHour, courseHour, priorCourse )圖2-6 實(shí)現(xiàn)關(guān)系內(nèi)部屬性間的引用聯(lián)系關(guān)系完整性約束條件數(shù)據(jù)庫(kù)模式導(dǎo)航圖一個(gè)含有主碼和外碼依賴的數(shù)據(jù)庫(kù)模式可以通過(guò)模式導(dǎo)航圖來(lái)表示。 關(guān)系完整性約束條件數(shù)據(jù)庫(kù)模式導(dǎo)航圖一個(gè)含有主碼和外碼依賴的數(shù)據(jù)庫(kù)

15、模式可以通過(guò)模式導(dǎo)航圖來(lái)表示。關(guān)系Student與關(guān)系Class之間存在多對(duì)一的“歸屬”聯(lián)系(一個(gè)班由多個(gè)學(xué)生組成,一個(gè)學(xué)生只能歸屬于某個(gè)班),通過(guò)外碼classNo實(shí)現(xiàn)該聯(lián)系。 關(guān)系Course與關(guān)系Student之間存在多對(duì)多的“選修”聯(lián)系。 關(guān)系Score的主碼是studentNo, courseNo, term,顯然同一個(gè)學(xué)生在同一個(gè)學(xué)期不允許修讀同一門課程多次。 關(guān)系Course的priorCourse屬性參照本關(guān)系的主碼courseNo屬性關(guān)系完整性約束條件數(shù)據(jù)庫(kù)模式導(dǎo)航圖 關(guān)系完整性約束條件數(shù)據(jù)庫(kù)模式導(dǎo)航圖一個(gè)含有主碼和外碼依賴的數(shù)據(jù)庫(kù)模式可以通過(guò)模式導(dǎo)航圖來(lái)表示關(guān)系Studen

16、t與關(guān)系Class之間、關(guān)系Class與關(guān)系Institute之間、關(guān)系Teacher與關(guān)系Institute之間都存在多對(duì)一的“歸屬”聯(lián)系 。關(guān)系Course的priorCourse屬性參照本關(guān)系的主碼courseNo屬性關(guān)系CourseClass與關(guān)系Course之間存在多對(duì)一的“開(kāi)課”聯(lián)系(每個(gè)學(xué)期一門課程可能開(kāi)設(shè)多個(gè)教學(xué)班,一個(gè)教學(xué)班只講授一門課程)。 關(guān)系CourseClass與關(guān)系Classroom之間存在多對(duì)一的“上課”聯(lián)系 關(guān)系CourseClass與關(guān)系Teacher之間存在多對(duì)一的“授課”聯(lián)系 關(guān)系CourseClass與關(guān)系Student之間存在多對(duì)多的“選課”聯(lián)系 。關(guān)

17、系SC的主碼是cClassNo, studentNo,顯然同一個(gè)學(xué)生不允許選修同一個(gè)教學(xué)班的課程多次。關(guān)系完整性約束條件用戶自定義完整性任何關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都應(yīng)該支持實(shí)體完整性和參照完整性 。用戶定義的完整性就是針對(duì)某一具體應(yīng)用要求來(lái)定義的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語(yǔ)義要求。例如,限制關(guān)系中某些屬性的取值要符合業(yè)務(wù)語(yǔ)義要求。 限制關(guān)系中某些屬性的取值之間需要滿足一定的邏輯關(guān)系。 限制關(guān)系中某屬性集上的取值必須唯一。 關(guān)系操作關(guān)系操作關(guān)系操作的特點(diǎn)是集合操作方式,即操作的對(duì)象和結(jié)果都是集合。這種操作方式也稱為一次一個(gè)集合的方式。相應(yīng)地,非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操作方式則為一

18、次一個(gè)記錄的方式。關(guān)系模型中的關(guān)系操作有查詢操作和更新操作(包括插入刪除和修改)兩大類 。查詢操作是關(guān)系操作中最主要的部分.查詢操作又可以分為選擇(select)、投影(project)、連接(join)、除(divide)、并(union)、交(intersection)、差(except)、笛卡爾積等。 關(guān)系操作關(guān)系操作能力可用兩種方式來(lái)表示:代數(shù)方式和邏輯方式。關(guān)系代數(shù)是用代數(shù)方式表達(dá)的關(guān)系查詢語(yǔ)言。關(guān)系演算是用邏輯方式表達(dá)的關(guān)系查詢語(yǔ)言。關(guān)系演算又可按謂詞變?cè)幕緦?duì)象是元組變量還是域變量分為元組關(guān)系演算和域關(guān)系演算。對(duì)于關(guān)系代數(shù)、元組關(guān)系演算和域關(guān)系演算均是抽象的查詢語(yǔ)言,在表達(dá)能力

19、上是完全等價(jià)的。目 錄 關(guān)系模型2.1關(guān)系代數(shù)2.2關(guān)系代數(shù)關(guān)系代數(shù)關(guān)系代數(shù)是通過(guò)關(guān)系代數(shù)運(yùn)算構(gòu)成的表達(dá)式來(lái)表達(dá)查詢?;镜年P(guān)系代數(shù)運(yùn)算有選擇、投影、集合并、集合差、笛卡爾積和更名等。 關(guān)系代數(shù)運(yùn)算是以一個(gè)或兩個(gè)關(guān)系作為輸入(即運(yùn)算對(duì)象)產(chǎn)生一個(gè)新的關(guān)系作為結(jié)果。 關(guān)系代數(shù)傳統(tǒng)的集合運(yùn)算前提假設(shè):關(guān)系r和關(guān)系s具有相同的n個(gè)屬性,且相應(yīng)的屬性取自同一個(gè)域。t是元組變量,tr表示t是r的一個(gè)元組。 并運(yùn)算 關(guān)系r與關(guān)系s的并記作 :rs = ttrts 其結(jié)果關(guān)系仍為n目關(guān)系,由屬于r或?qū)儆趕的所有元組 組成。關(guān)系代數(shù)傳統(tǒng)的集合運(yùn)算 差 關(guān)系r與關(guān)系s的差記作 :r-s = ttrts 其結(jié)果關(guān)

20、系仍為n目關(guān)系,由屬于r而不屬于s的所有元組組成。 交 關(guān)系r與關(guān)系s的交記作:rs = ttrts 其結(jié)果關(guān)系仍為n目關(guān)系,由既屬于r又屬于s的所有元組組成。關(guān)系的交可以通過(guò)差來(lái)表達(dá),即rs = r-(r-s)。 關(guān)系代數(shù)傳統(tǒng)的集合運(yùn)算 笛卡爾積 兩個(gè)分別為n目和m目的關(guān)系r和s的笛卡爾積是一個(gè)n+m目元組的集合。 元組的前n列是關(guān)系r的一個(gè)元組,后m列是關(guān)系s的一個(gè)元組若關(guān)系r有kr個(gè)元組,關(guān)系s有ks個(gè)元組,則關(guān)系r和s的笛卡爾積有krks個(gè)元組。記作 : rs = trtstrrtss 成績(jī)管理數(shù)據(jù)庫(kù)ScoreDB的實(shí)例數(shù)據(jù)(P56) 關(guān)系Student、Course和Score可分別

21、描述為:Student(學(xué)號(hào),姓名,性別,出生日期,所學(xué)專業(yè))Course(課程號(hào),課程名稱,學(xué)時(shí),學(xué)分)Score(學(xué)號(hào),課程號(hào),學(xué)期,成績(jī))關(guān)系模型要求關(guān)系必須是規(guī)范化的,即要求關(guān)系必須滿足一定的規(guī)范條件。最基本的規(guī)范條件是:關(guān)系的每一個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng),即不允許表中有表 Student關(guān)系StudentNo StudentName sex birthday native nation classNo 0701001 李小勇 男 1990-12-21 南昌 漢族 CS0701 0701008 王 紅 男 1992-04-26 上海 漢族 CS0701 0703010 李宏冰 女

22、 1992-03-09 太原 蒙古族 AC0703 0703045 王 紅 男 1992-04-26 北京 漢族 AC0703 0802002 劉方晨 女 1990-11-11 南昌 傣族 ISO802 0802005 王紅敏 女 1990-10-01 上海 蒙古族 ISO802Course關(guān)系CourseNoCourseName creditHour courseHour priorCourseAC001 基礎(chǔ)會(huì)計(jì) 48 3 nullCN028大學(xué)語(yǔ)文 48 3 nulCS012操作系統(tǒng) 80 5 nullCS015 數(shù)據(jù)庫(kù)系統(tǒng) 64 4 CS012Score關(guān)系StudentNocours

23、eNoterm score0701001CN02807081850701001CS01207082880701001CS01508091920701008AC00107081760701008CN02807081860701008CS01207082930701008CS01508091960703010AC00107081920703010CN02807081830703010CS01207082730703045AC00107081520703045AC00108091940703045 CN028 07081 800703045 CS015 08091 820802002AC001080

24、91980802002CN02808091720802002CS01509101850802005AC00109101880802005CS01208092900802005CS0150910187Class關(guān)系ClassNoClassName instiute grade ClassNumAC0703會(huì)計(jì)學(xué)08(3)班 會(huì)計(jì)學(xué)院 2008 46CS0701計(jì)算機(jī)07(1)班 信息學(xué)院 2007 48ISO802信息系統(tǒng)08(2)班 信息學(xué)院 2008 43關(guān)系代數(shù)傳統(tǒng)的集合運(yùn)算對(duì)于數(shù)據(jù)庫(kù)ScoreDB,笛卡爾積ClassCourse的結(jié)果關(guān)系為: 關(guān)系代數(shù)專門的關(guān)系運(yùn)算 選擇 選擇操作是在關(guān)

25、系r中查找滿足給定謂詞(即選擇條件)的所有元組,記作: P (r) = ttrP(t) P表示謂詞(即選擇條件),它是一個(gè)邏輯表達(dá)式,取值為“真”或“假”。 關(guān)系代數(shù)專門的關(guān)系運(yùn)算 選擇 例如,在數(shù)據(jù)庫(kù)ScoreDB中,查找2007級(jí)的所有班級(jí)情況 grade=2007(Class) ClassNo ClassName instiute grade ClassNumAC0703 會(huì)計(jì)學(xué)08(3)班 會(huì)計(jì)學(xué)院 2007 46CS0701 計(jì)算機(jī)07(1)班 信息學(xué)院 2007 48 例如,在數(shù)據(jù)庫(kù)ScoreDB中,查找所有1992年及以后出生 的女學(xué)生情況 ,year(birthday)=199

26、2sex=女(Student)StudentNoStudentName sex birthday native nation classNo 0703010 李宏冰 女 1992-03-09 太原 蒙古族 AC0703關(guān)系代數(shù)專門的關(guān)系運(yùn)算 投影 關(guān)系是一個(gè)二維表,對(duì)它的操作可以從水平(行)的角度進(jìn)行,即選擇操作;也可以從縱向(列)的角度進(jìn)行,即投影操作。 關(guān)系r上的投影是從r中選擇出若干屬性列組成新的關(guān)系。記作: A(r) = tAtr A為關(guān)系r的屬性集合。 關(guān)系代數(shù)專門的關(guān)系運(yùn)算 投影 例如,在數(shù)據(jù)庫(kù)ScoreDB中,查找所有學(xué)生的姓名和民族 studentName, nation(St

27、udent) 例如,在數(shù)據(jù)庫(kù)ScoreDB中,查找所有“蒙古族”學(xué)生的 姓名和籍貫 StudentName nation 李小勇 漢族 王紅 漢族 王宏冰 蒙古族 劉方晨 傣族 王紅敏 蒙古族StudentName native 王宏冰 太原 王紅敏 上海studentName, native(nation=蒙古族(Student)關(guān)系代數(shù)專門的關(guān)系運(yùn)算 連接 連接也稱為連接。記為A op B,其中A、B分別為關(guān)系r和s中的度數(shù)相等且可比的連接屬性集,op為比較運(yùn)算符。 連接是從兩個(gè)關(guān)系的笛卡爾積中選取連接屬性間滿足謂詞的所有元組。記作 : r s = trtstrrtss(r.A op s.

28、B) 連接運(yùn)算就是從關(guān)系r和s的笛卡爾積rs中,選取r關(guān)系在A屬性集上的值與s關(guān)系在B屬性集上的值滿足連接謂詞的所有元組,即 r s = 關(guān)系代數(shù)專門的關(guān)系運(yùn)算 連接連接運(yùn)算中有兩種最常用、最重要的連接,一種是等值連接(equijoin),另一種是自然連接(natural join)。為等值比較謂詞的連接運(yùn)算稱為等值連接。 自然連接是一種特殊的等值連接,它要求兩個(gè)參與連接的關(guān)系具有公共的屬性集,并在這個(gè)公共屬性集上進(jìn)行等值連接;同時(shí),還要求將連接結(jié)果中的重復(fù)屬性列去除掉,即在公共屬性集中的列只保留一次。 關(guān)系代數(shù)專門的關(guān)系運(yùn)算例如,在數(shù)據(jù)庫(kù)ScoreDB中,查找所有2008級(jí)的“蒙古族”學(xué)生的

29、姓名 StudentName 王紅敏 分析: nation=蒙古族(Student)可以找到所有蒙古族學(xué)生的情況,但關(guān)系Student中沒(méi)有年級(jí)的信息,因此必須將關(guān)系Student與關(guān)系Class關(guān)聯(lián)起來(lái)。 根據(jù)模式導(dǎo)航圖可知,關(guān)系Student與關(guān)系Class可通過(guò)外碼classNo關(guān)聯(lián)起來(lái),這種外碼引用關(guān)系可通過(guò)自然連接表示 Student Class =Student.classNo=Class.classNo(StudentClass) 最后的查詢可表達(dá)為: studentName(nation=蒙古族(Student) grade=2008(Class) studentName(na

30、tion=蒙古族(Student) grade=2008(Class) =studentName(Student.classNo=Class.classNo(nation=蒙古族(Student)grade=2008(Class) =studentName(Student.classNo=Class.classNo(nation=蒙古族grade=2008(StudentClass)=studentName(nation=蒙古族grade=2008Student.classNo=Class.classNo(StudentClass) =studentName(nation=蒙古族grade=2

31、008(Student.classNo=Class.classNo(StudentClass) =studentName(nation=蒙古族grade=2008(Student Class) 關(guān)系代數(shù)關(guān)系代數(shù)例如,在數(shù)據(jù)庫(kù)ScoreDB中,查找課程號(hào)為“AC001”課程的考試中比學(xué)號(hào)為“0703045”的學(xué)生考得更好的所有學(xué)生的姓名和成績(jī)。 分析: 找出學(xué)號(hào)為“0703045”的學(xué)生在課程號(hào)為“AC001”的課 程中的成績(jī)?cè)M (結(jié)果關(guān)系記為r1),可表達(dá)為:studentNo=0703045courseNo=AC001(Score) 找出選修了課程號(hào)為“AC001”課程的所有學(xué)生的成績(jī)?cè)?

32、組 (結(jié)果關(guān)系 記為r2) ,其查詢可表達(dá)為: courseNo=AC001(Score) 將關(guān)系r1與關(guān)系r2進(jìn)行連接 (結(jié)果關(guān)系記為r3),其查詢可表達(dá)為: r1 r1.scorer2.score r2 = r1.scorer2.score(r1r2) 將關(guān)系r3與學(xué)生關(guān)系Student按外碼studentNo進(jìn)行自然連接,并對(duì)連接 結(jié)果在屬性studentName和r2.score上進(jìn)行投影,其查詢可表達(dá)為: studentName, r2.score(r3 Student) = studentName, r2.score(r2.studentNo=Student.studentNo(r

33、3Student) = studentName, r2.score(r2.studentNo=Student.studentNo(r1.scorer2.score(r1r2) Student)studentNo courseNo term score0701008 AC001 07081 760703010 AC001 07081 92 AC001 07081 52 AC001 08091 940802002 AC001 08091 980802005 AC001 09101 88 (b) 關(guān)系r2studentNo courseNo term score0703045 AC001 07081

34、 520703045 AC001 08091 94 (a) 關(guān)系r1r1.studentNo r1.courseNo r1.term r1.score r2.studentNo r2.courseNo r2.term r2.score0703045 AC001 07081 52 0701008 AC001 07081760703045 AC001 07081 52 0703010 AC001 07081920703045 AC001 07081 52 0703045 AC001 08091940703045 AC001 07081 52 AC001 08091980703045 AC001 0

35、7081 52 0802005 AC001 09101880703045 AC001 08091 94 0802002 AC001 0809198 (c) 關(guān)系r3studentName score王 紅 76李宏冰 92王 紅 94劉方晨 98王紅敏 88 (d) 最后結(jié)果圖2-19 例2.16的連接的計(jì)算過(guò)程Score關(guān)系StudentNocourseNoterm score0701001CN02807081850701001CS01207082880701001CS01508091920701008AC00107081760701008CN02807081860701008CS01207

36、082930701008CS01508091960703010AC00107081920703010CN02807081830703010CS01207082730703045AC00107081520703045AC00108091940703045 CN028 07081 800703045 CS015 08091 820802002AC00108091980802002CN02808091720802002CS01509101850802005AC00109101880802005CS01208092900802005CS0150910187關(guān)系代數(shù)關(guān)系代數(shù)專門的關(guān)系運(yùn)算 除運(yùn)算例如,需

37、要查找修讀過(guò)信息學(xué)院開(kāi)設(shè)的所有課程的學(xué)生學(xué)號(hào),如何表達(dá)查詢? 分析:查找出修讀過(guò)信息學(xué)院課程的所有學(xué)生 r1 = studentNo, courseNo(courseNo LIKE CS%(Score) 找出信息學(xué)院開(kāi)設(shè)的所有課程 r2 = courseNo(courseNo LIKE CS%(Course) StudentNo courseNo0701001CS0120701001CS0150701008CS0120701008CS0150703010CS0120703045 CS015 0802002CS0150802005CS0120802005CS015CourseNo CS012 C

38、S015關(guān)系代數(shù)專門的關(guān)系運(yùn)算 (象集的概念見(jiàn)P58) 比較圖2-20(a)和(b) ,修讀過(guò)信息學(xué)院開(kāi)設(shè)的所有課程的學(xué)生 就是關(guān)系r1中滿足“courseNo列包含關(guān)系r2的所有行”的那些學(xué)生 。關(guān)系代數(shù)專門的關(guān)系運(yùn)算設(shè)關(guān)系r(R)和s(S),屬性集S是R的子集,即SR,則關(guān)系rs是關(guān)系r中滿足下列條件的元組在屬性集R-S上的投影: trr,記 x= trR-S,則關(guān)系r中屬性集R-S的取值x的象集Sx包含關(guān)系s。記作 rs = trR-StrrsSx 關(guān)系代數(shù)專門的關(guān)系運(yùn)算例如,關(guān)系數(shù)據(jù)庫(kù)ScoreDB 中,求以下結(jié)果 Score(courseNo(courseNo=AC001(Cours

39、e) 的結(jié)果為: Score(courseNo(courseNo=CN028(Course)的結(jié)果為: StudentNoterm score0701008 07081 760703010 07081 920703045 07081 520703045 08091 940802002 08091 980802005 09101 88StudentNoterm score0701001 07081 850701008 07081 860703010 07081 830703045 07081 800802002 08091 72Score關(guān)系StudentNocourseNoterm score

40、0701001CN02807081850701001CS01207082880701001CS01508091920701008AC00107081760701008CN02807081860701008CS01207082930701008CS01508091960703010AC00107081920703010CN02807081830703010CS01207082730703045AC00107081520703045AC00108091940703045 CN028 07081 800703045 CS015 08091 820802002AC00108091980802002CN

41、02808091720802002CS01509101850802005AC00109101880802005CS01208092900802005CS0150910187Score關(guān)系StudentNocourseNoterm score0701001CN02807081850701001CS01207082880701001CS01508091920701008AC00107081760701008CN02807081860701008CS01207082930701008CS01508091960703010AC00107081920703010CN02807081830703010CS

42、01207082730703045AC00107081520703045AC00108091940703045 CN028 07081 800703045 CS015 08091 820802002AC00108091980802002CN02808091720802002CS01509101850802005AC00109101880802005CS01208092900802005CS0150910187關(guān)系代數(shù)查詢綜合舉例給定一個(gè)查詢需求,構(gòu)造其關(guān)系代數(shù)表達(dá)式的步驟 明確該查詢涉及到哪些屬性; 明確該查詢涉及到哪些關(guān)系; 根據(jù)數(shù)據(jù)庫(kù)模式導(dǎo)航圖,通過(guò)多對(duì)一聯(lián)系(或一對(duì)多聯(lián)系)把所有涉及的關(guān)系連接起來(lái),每一個(gè)多對(duì)一聯(lián)系(或一對(duì)多聯(lián)系)都可以表示為外碼屬性的自然連接。 關(guān)系代數(shù)查詢綜合舉例 例如,ScoreDB數(shù)據(jù)庫(kù)中,查找“蒙古族”學(xué)生所修各門課程的情況,要求輸出學(xué)生姓名、課程名和成績(jī)。 分析: 該查詢共涉及4個(gè)屬性,分別是民族nation、姓名studentName課程名courseName和成績(jī)score,其中,nation屬性用于選擇條件notio

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論