第2章 關(guān)系模型_第1頁
第2章 關(guān)系模型_第2頁
第2章 關(guān)系模型_第3頁
第2章 關(guān)系模型_第4頁
第2章 關(guān)系模型_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 引言 關(guān)系數(shù)據(jù)模型是1970年由E.F.Codd提出的,他 把數(shù)學(xué)上的關(guān)系代數(shù)應(yīng)用到數(shù)據(jù)存儲的問題中, 因此,關(guān)系模型的理論基礎(chǔ)是集合論和數(shù)理邏 輯。 在關(guān)系模型中,數(shù)據(jù)以表的形式組織。不僅存 放實體屬性還可以存放實體間的關(guān)系,而且數(shù) 據(jù)冗余少。 關(guān)系模型以表形式存放數(shù)據(jù),通俗易懂,又有 嚴(yán)格的數(shù)據(jù)基礎(chǔ)。 本章主要內(nèi)容本章主要內(nèi)容 u關(guān)系模型的數(shù)據(jù)組織方式關(guān)系模型的數(shù)據(jù)組織方式數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) u按關(guān)系模型組織的數(shù)據(jù)必須滿足的約束按關(guān)系模型組織的數(shù)據(jù)必須滿足的約束 條件條件數(shù)據(jù)完整性數(shù)據(jù)完整性 u按關(guān)系模型組織的數(shù)據(jù)所允許的操作按關(guān)系模型組織的數(shù)據(jù)所允許的操作 數(shù)據(jù)操作數(shù)據(jù)操作 2.1 關(guān)系

2、模型的數(shù)據(jù)結(jié)構(gòu)關(guān)系模型的數(shù)據(jù)結(jié)構(gòu) 1.關(guān)系的基本名詞關(guān)系的基本名詞 v關(guān)系:一張滿足某些約束條件的二維表,如表一張滿足某些約束條件的二維表,如表2-1 Students關(guān)系。關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)是關(guān)系。關(guān)系。關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)是關(guān)系。 v元組:關(guān)系中的一行稱為一個元組。對應(yīng)表中的一關(guān)系中的一行稱為一個元組。對應(yīng)表中的一 行,存放的是客觀世界的一個實體,如表行,存放的是客觀世界的一個實體,如表Students 關(guān)系中的一行,存放的是一個學(xué)生的數(shù)據(jù)關(guān)系中的一行,存放的是一個學(xué)生的數(shù)據(jù) 。 v屬性:關(guān)系中的一列,稱為一個屬性。對應(yīng)表中的關(guān)系中的一列,稱為一個屬性。對應(yīng)表中的 一列。一個屬性表示實體的一

3、個特征,如表一列。一個屬性表示實體的一個特征,如表 Students關(guān)系中的關(guān)系中的Sno屬性表示學(xué)生實體的學(xué)號特征屬性表示學(xué)生實體的學(xué)號特征 值。值。 v域:關(guān)系中一個屬性的取值范圍。例如,關(guān)系中一個屬性的取值范圍。例如,Ssex的取的取 值范圍是值范圍是M, F,代表性別為男性和女性。,代表性別為男性和女性。 v關(guān)系示例關(guān)系示例: v關(guān)系的等價術(shù)語之間的對應(yīng)關(guān)系關(guān)系的等價術(shù)語之間的對應(yīng)關(guān)系 一般用戶 關(guān)系模型 程序員 表(Table) 關(guān)系(Relation) 文件(File) 行(Row) 實體(Entity) 記錄(Record) 列(Column) 屬性(Attribute) 字段(

4、Field) v關(guān)系中每一屬性都是最小的關(guān)系中每一屬性都是最小的。對表而言,每對表而言,每 一個行與列的交叉點上只能存放一個單值一個行與列的交叉點上只能存放一個單值 。 v關(guān)系中同一屬性的所有屬性值具有相同的數(shù)關(guān)系中同一屬性的所有屬性值具有相同的數(shù) 據(jù)類型。據(jù)類型。對表而言,表中同一列中的所有列對表而言,表中同一列中的所有列 值都必須屬于同一數(shù)據(jù)類型。例如表值都必須屬于同一數(shù)據(jù)類型。例如表2-1中中 Students表的表的Sname列的所有值都是字符串類列的所有值都是字符串類 型。型。 v關(guān)系中的屬性名不能重復(fù)。關(guān)系中的屬性名不能重復(fù)。對表而言,表中對表而言,表中 每一列都有惟一的列名,不允

5、許有兩個列有每一列都有惟一的列名,不允許有兩個列有 相同的列名。例如表相同的列名。例如表2-1 Students表不允許有表不允許有 兩個列,列名都叫兩個列,列名都叫Sname。 v關(guān)系的屬性位置從左到右出現(xiàn)的順序無關(guān)緊要關(guān)系的屬性位置從左到右出現(xiàn)的順序無關(guān)緊要。 對表而言,表中的列從左到右出現(xiàn)的順序無關(guān)緊對表而言,表中的列從左到右出現(xiàn)的順序無關(guān)緊 要。即列的次序可以任意交換。例如表要。即列的次序可以任意交換。例如表2-1 Students表中,可以把表中,可以把Sname列放在第一列,也列放在第一列,也 可以是第二列等等可以是第二列等等。 v關(guān)系中任意兩個元組不能完全相同關(guān)系中任意兩個元組不

6、能完全相同。對表而言,對表而言, 表中任意兩個行不能完全相同,即每一行都是惟表中任意兩個行不能完全相同,即每一行都是惟 一的,沒有重復(fù)的行。一的,沒有重復(fù)的行。 v關(guān)系中的元組從上到下出現(xiàn)的順序無關(guān)緊要關(guān)系中的元組從上到下出現(xiàn)的順序無關(guān)緊要。對對 表而言,表中的行從上到下出現(xiàn)的順序也無關(guān)緊表而言,表中的行從上到下出現(xiàn)的順序也無關(guān)緊 要,即行的次序可以任意交換。要,即行的次序可以任意交換。 v滿足上述條件的表才能稱作關(guān)系。滿足上述條件的表才能稱作關(guān)系。 v當(dāng)我們把關(guān)系和表看作是等價的時候,即默認(rèn)當(dāng)我們把關(guān)系和表看作是等價的時候,即默認(rèn) 此表是滿足上述關(guān)系的性質(zhì)的。此表是滿足上述關(guān)系的性質(zhì)的。 v

7、理解關(guān)系的性質(zhì):橫向上看,一個關(guān)系可以看理解關(guān)系的性質(zhì):橫向上看,一個關(guān)系可以看 作是若干個元組的集合;縱向上看,一個關(guān)系作是若干個元組的集合;縱向上看,一個關(guān)系 可以看作是若干個屬性的集合。集合的理論表可以看作是若干個屬性的集合。集合的理論表 明,集合中不允許包含重復(fù)元素的,因而可以明,集合中不允許包含重復(fù)元素的,因而可以 解釋關(guān)系的解釋關(guān)系的6條性質(zhì)。條性質(zhì)。 3. 關(guān)系的候選鍵與主鍵關(guān)系的候選鍵與主鍵 v表中某一列(或若干列的最小組合)的值能惟表中某一列(或若干列的最小組合)的值能惟 一標(biāo)識一個行,稱該列或列組為候選鍵。如一標(biāo)識一個行,稱該列或列組為候選鍵。如 Students表的表的S

8、no列,就是一個候選鍵。因為,列,就是一個候選鍵。因為, 給定一個給定一個Sno的值,如的值,如20030101,就能確定表,就能確定表 中惟一的一行,第中惟一的一行,第4行。行。 v對于一個表,可能有多個候選鍵對于一個表,可能有多個候選鍵 。 v候選鍵取決于應(yīng)用范圍候選鍵取決于應(yīng)用范圍,如給定學(xué)院,沒有重復(fù)如給定學(xué)院,沒有重復(fù) 的學(xué)生姓名,則的學(xué)生姓名,則Sname是是Students表的一個候表的一個候 選鍵。選鍵。 v如果一個表有多個候選鍵,數(shù)據(jù)庫設(shè)計者通如果一個表有多個候選鍵,數(shù)據(jù)庫設(shè)計者通 常選擇其中一個候選鍵作為區(qū)分行的惟一性常選擇其中一個候選鍵作為區(qū)分行的惟一性 標(biāo)識符,稱為主鍵

9、標(biāo)識符,稱為主鍵(primary key,PK)。如。如 果一個表只有一個候選鍵,那么這個候選鍵果一個表只有一個候選鍵,那么這個候選鍵 就作為主鍵。例如,在就作為主鍵。例如,在Students表,把表,把Sno 作為該表的主鍵。作為該表的主鍵。 v因為主鍵是候選鍵之一,而根據(jù)候選鍵的定因為主鍵是候選鍵之一,而根據(jù)候選鍵的定 義,候選鍵列上的各個值都惟一,因此主鍵義,候選鍵列上的各個值都惟一,因此主鍵 列上的各個值也都惟一。列上的各個值也都惟一。 4. 關(guān)系模式關(guān)系模式 v關(guān)系模式是關(guān)系的形式化描述。關(guān)系模式是關(guān)系的形式化描述。 v最簡單的表示為:最簡單的表示為: 關(guān)系名(屬性名關(guān)系名(屬性名1

10、,屬性名屬性名2,屬性名屬性名n) 注意:注意:主鍵要用下劃線表明。但有時,關(guān)系模式主鍵要用下劃線表明。但有時,關(guān)系模式 中并沒有表明主鍵。中并沒有表明主鍵。 例如:例如:Students關(guān)系的關(guān)系模式為:關(guān)系的關(guān)系模式為: Students(Sno,Sname,Ssex,Sbirthdate,Sdept) v關(guān)系模式即是一個表的表頭描述。關(guān)系模式即是一個表的表頭描述。 v表頭也稱為關(guān)系的結(jié)構(gòu)、關(guān)系的型等。表頭也稱為關(guān)系的結(jié)構(gòu)、關(guān)系的型等。 v除表頭一行以外的所有行的集合除表頭一行以外的所有行的集合(即表即表 內(nèi)容內(nèi)容), 稱為關(guān)系的值。稱為關(guān)系的值。 v一個關(guān)系一個關(guān)系(表表),由表頭和表內(nèi)

11、容兩部,由表頭和表內(nèi)容兩部 分組成,表頭是相對不變的,而表內(nèi)分組成,表頭是相對不變的,而表內(nèi) 容是經(jīng)常改變的。如容是經(jīng)常改變的。如Students表中,表中, 當(dāng)有新學(xué)生入學(xué)時,就增加若干行,當(dāng)有新學(xué)生入學(xué)時,就增加若干行, 當(dāng)學(xué)生畢業(yè)時,就要刪除若干行,所當(dāng)學(xué)生畢業(yè)時,就要刪除若干行,所 以表是動態(tài)的。以表是動態(tài)的。 5. 關(guān)系數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫 v關(guān)系數(shù)據(jù)庫是相互關(guān)聯(lián)的表或者說關(guān)系的集合關(guān)系數(shù)據(jù)庫是相互關(guān)聯(lián)的表或者說關(guān)系的集合 v因為一個表存放的是某一應(yīng)用領(lǐng)域的一個實體或因為一個表存放的是某一應(yīng)用領(lǐng)域的一個實體或 實體間的聯(lián)系,如實體間的聯(lián)系,如Students表存放的是學(xué)生這個實表存放的是

12、學(xué)生這個實 體(集),體(集),Courses表存放的是課程這個實體表存放的是課程這個實體 (集),(集),Enrollment表存放的學(xué)生實體與課程實表存放的學(xué)生實體與課程實 體之間的聯(lián)系,這里為選課聯(lián)系。因此關(guān)系數(shù)據(jù)體之間的聯(lián)系,這里為選課聯(lián)系。因此關(guān)系數(shù)據(jù) 庫中存放的是某一應(yīng)用領(lǐng)域中的所有實體和實體庫中存放的是某一應(yīng)用領(lǐng)域中的所有實體和實體 之間的聯(lián)系。之間的聯(lián)系。 v一個關(guān)系用一個關(guān)系模式表示,所有關(guān)系模式集一個關(guān)系用一個關(guān)系模式表示,所有關(guān)系模式集 合構(gòu)成數(shù)據(jù)庫的模式,它是數(shù)據(jù)庫整體邏輯結(jié)構(gòu)合構(gòu)成數(shù)據(jù)庫的模式,它是數(shù)據(jù)庫整體邏輯結(jié)構(gòu) 的描述。的描述。 2.2 關(guān)系模型的數(shù)據(jù)完整性關(guān)系

13、模型的數(shù)據(jù)完整性 v關(guān)系模型的數(shù)據(jù)完整性指的是完整性關(guān)系模型的數(shù)據(jù)完整性指的是完整性 規(guī)則。規(guī)則。 v完整性規(guī)則包括實體完整性規(guī)則、參完整性規(guī)則包括實體完整性規(guī)則、參 照完整性規(guī)則和用戶自定義完整性規(guī)照完整性規(guī)則和用戶自定義完整性規(guī) 則三大類。則三大類。 v實體完整性和參照完整性是關(guān)系模型實體完整性和參照完整性是關(guān)系模型 必須滿足的兩個完整性規(guī)則。必須滿足的兩個完整性規(guī)則。 1. 實體完整性規(guī)則實體完整性規(guī)則 v實體完整性規(guī)則實體完整性規(guī)則是表中任意一行的主鍵值不能是表中任意一行的主鍵值不能 為空值。為空值。 v空值,用空值,用“null”表示,大小寫一樣??罩凳巧斜硎?,大小寫一樣??罩凳巧?

14、未確定的值或不確定的值。如未確定的值或不確定的值。如Enrollment表中表中 的的Grade值。值。 v空值和數(shù)值型列的空值和數(shù)值型列的0值以及字符型列的空字符值以及字符型列的空字符 串的不同,數(shù)值型列的串的不同,數(shù)值型列的0值與字符型列的空字值與字符型列的空字 符串都是確定的值。符串都是確定的值。 v根據(jù)主鍵的定義,主鍵值必須惟一。因此,實根據(jù)主鍵的定義,主鍵值必須惟一。因此,實 體完整性也可定義為:主鍵值惟一且不能為空體完整性也可定義為:主鍵值惟一且不能為空 值。表中任意一行的主鍵值不能為空值。值。表中任意一行的主鍵值不能為空值。 v完整性的意義:一個表對應(yīng)存放一個實體,表完整性的意義

15、:一個表對應(yīng)存放一個實體,表 中的每一行代表實體中的一個實例。如學(xué)生表中的每一行代表實體中的一個實例。如學(xué)生表 用來存放學(xué)生實體,該表中的一行代表一個學(xué)用來存放學(xué)生實體,該表中的一行代表一個學(xué) 生,一個學(xué)生有惟一的一個學(xué)號。如果主鍵值生,一個學(xué)生有惟一的一個學(xué)號。如果主鍵值 SnoSno為空值,表明該學(xué)生的學(xué)號不能確定,也為空值,表明該學(xué)生的學(xué)號不能確定,也 就是說沒有惟一確定的學(xué)號,這只能說明他就是說沒有惟一確定的學(xué)號,這只能說明他/ / 她不是學(xué)生,因此就不應(yīng)該存放在學(xué)生表中。她不是學(xué)生,因此就不應(yīng)該存放在學(xué)生表中。 v實體完整性的作用:一旦定義表的主鍵,實體完整性的作用:一旦定義表的主鍵

16、, RDBMS將自動地對該表中的每一行的主鍵值將自動地對該表中的每一行的主鍵值 進(jìn)行檢查,若發(fā)現(xiàn)主鍵值為空或不惟一,進(jìn)行檢查,若發(fā)現(xiàn)主鍵值為空或不惟一, RDBMS會給出錯誤信息,這樣就能確保表中會給出錯誤信息,這樣就能確保表中 的每一行是惟一的,可以區(qū)分的。的每一行是惟一的,可以區(qū)分的。 2. 參照完整性規(guī)則參照完整性規(guī)則 v參照完整性規(guī)則參照完整性規(guī)則是一個表的外鍵值可以為空值。是一個表的外鍵值可以為空值。 若不為空值,則必須等于另一個表中主鍵的某若不為空值,則必須等于另一個表中主鍵的某 個值。個值。 v外鍵(外鍵(Foreign Key,F(xiàn)K):若一個表):若一個表R1中的中的 一個列或

17、列組對應(yīng)另一個表一個列或列組對應(yīng)另一個表R2的主鍵,那么該的主鍵,那么該 列或列組稱為表列或列組稱為表R1的外鍵。的外鍵。 v外鍵可以由一個或多個列組成,可以有重復(fù)值。外鍵可以由一個或多個列組成,可以有重復(fù)值。 v外鍵與主鍵的關(guān)系示例:外鍵與主鍵的關(guān)系示例: 圖2-1 學(xué)生、課程、選課表主鍵、外鍵參照關(guān)系圖 v外鍵的取值的兩種情況分析:外鍵的取值的兩種情況分析: 圖2-2系表、課程表主鍵、外鍵參照關(guān)系圖 v參照完整性的作用:在關(guān)系數(shù)據(jù)庫系統(tǒng)中,參照完整性的作用:在關(guān)系數(shù)據(jù)庫系統(tǒng)中, 一旦定義了表的外鍵,也即定義了外鍵與另一旦定義了表的外鍵,也即定義了外鍵與另 一個表的主鍵的參照與被參照聯(lián)系,一

18、個表的主鍵的參照與被參照聯(lián)系, RDBMS將根據(jù)外鍵的定義,自動檢查表中將根據(jù)外鍵的定義,自動檢查表中 的每一行,若發(fā)現(xiàn)外鍵值違反外鍵的規(guī)則,的每一行,若發(fā)現(xiàn)外鍵值違反外鍵的規(guī)則, RDBMS會給出錯誤信息,要求用戶糾正,會給出錯誤信息,要求用戶糾正, 這樣能確保表之間的參照與被參照聯(lián)系的正這樣能確保表之間的參照與被參照聯(lián)系的正 確性。確性。 v說明:說明:實體完整性和參照完整性在關(guān)系實體完整性和參照完整性在關(guān)系 模型中是必須實現(xiàn)的。遺憾的是模型中是必須實現(xiàn)的。遺憾的是SQL Server 2000中可以定義沒有主鍵的表,中可以定義沒有主鍵的表, 即沒有實現(xiàn)實體完整性。另外,即使表即沒有實現(xiàn)實

19、體完整性。另外,即使表 有外鍵,也可以不定義為外鍵,沒有實有外鍵,也可以不定義為外鍵,沒有實 現(xiàn)參照完整性?,F(xiàn)參照完整性。 3. 用戶自定義完整性規(guī)則用戶自定義完整性規(guī)則 v用戶自定義完整性規(guī)則用戶自定義完整性規(guī)則是表格設(shè)計者為了保是表格設(shè)計者為了保 證表中某些行、列的數(shù)據(jù)滿足具體應(yīng)用要求證表中某些行、列的數(shù)據(jù)滿足具體應(yīng)用要求 而自定義的一些規(guī)則。而自定義的一些規(guī)則。 v自定義規(guī)則往往根據(jù)實際的應(yīng)用背景提出來。自定義規(guī)則往往根據(jù)實際的應(yīng)用背景提出來。 例如:在例如:在Students表中,表中,Ssex列的取值范圍只列的取值范圍只 能是能是F/ M, 因為實際情況是性別只能為男因為實際情況是性

20、別只能為男 或女?;蚺?。 第二章 作業(yè)(1) 1解釋下列術(shù)語:解釋下列術(shù)語: (1)候選鍵、主鍵、外鍵)候選鍵、主鍵、外鍵 (2)關(guān)系、關(guān)系模式、關(guān)系數(shù)據(jù)庫)關(guān)系、關(guān)系模式、關(guān)系數(shù)據(jù)庫 (3)完整性規(guī)則、實體完整性規(guī)則、參)完整性規(guī)則、實體完整性規(guī)則、參 照完整性規(guī)則照完整性規(guī)則 2Students、Courses、Enrollment三個三個 表的結(jié)構(gòu)和內(nèi)容如圖表的結(jié)構(gòu)和內(nèi)容如圖2-1所示。其中所示。其中Sno列是列是 Students表的主鍵,表的主鍵,Cno列是列是Courses表的表的 主鍵,(主鍵,(Sno,Cno)列組是)列組是Enrollment表表 的主鍵,的主鍵,Sno是是E

21、nrollment的外鍵,與的外鍵,與 Students表的主鍵對應(yīng),表的主鍵對應(yīng),Cno是是Enrollment 的另一個外鍵,與的另一個外鍵,與Courses表的主鍵對應(yīng)。假表的主鍵對應(yīng)。假 定要向定要向Enrollment表中插入以下新行。問哪表中插入以下新行。問哪 些行能夠成功插入?為什么?些行能夠成功插入?為什么? (1) (20010119,C1,null) (2) (20010101,C5,null) (3) (20010101,C1,null) (4) (null,C1,80) (5) (20010101,C2,null) 圖2-1 學(xué)生、課程、選課表主鍵、外鍵參照關(guān)系圖 3觀

22、測以下兩個表的內(nèi)容,確定觀測以下兩個表的內(nèi)容,確定T1表的三表的三 個候選鍵,個候選鍵,T2表的一個候選鍵表的一個候選鍵。 T1 T2 ABCDABCD A1B1C1 D1A1 B1 C1 D1 A2B3C1 D2A2 B1 C1 D1 A3B4C2 D2A1 B2 C1 D1 A4B2C2 D1A2 B1 C2 D1 v關(guān)系代數(shù)關(guān)系代數(shù)是對關(guān)系型數(shù)據(jù)庫操作的抽象語言,也稱是對關(guān)系型數(shù)據(jù)庫操作的抽象語言,也稱 查詢語言。這里的查詢,包括數(shù)據(jù)的插入、刪除、查詢語言。這里的查詢,包括數(shù)據(jù)的插入、刪除、 修改、查找等,即數(shù)據(jù)的操縱。修改、查找等,即數(shù)據(jù)的操縱。 v關(guān)系代數(shù)只對數(shù)據(jù)操縱進(jìn)行抽象表示,基

23、于關(guān)系代關(guān)系代數(shù)只對數(shù)據(jù)操縱進(jìn)行抽象表示,基于關(guān)系代 數(shù)實現(xiàn)的關(guān)系型數(shù)據(jù)庫操縱語言,如數(shù)實現(xiàn)的關(guān)系型數(shù)據(jù)庫操縱語言,如SQL,才能對,才能對 數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行實際操作。數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行實際操作。 v關(guān)系代數(shù)的作用只是用來衡量其它實現(xiàn)了的查詢語關(guān)系代數(shù)的作用只是用來衡量其它實現(xiàn)了的查詢語 言如言如SQL等的查詢能力。等的查詢能力。 2.3 關(guān)系模型的數(shù)據(jù)操作關(guān)系模型的數(shù)據(jù)操作關(guān)系代數(shù)關(guān)系代數(shù) v關(guān)系代數(shù)中,關(guān)系代數(shù)中,運(yùn)算運(yùn)算的對象是關(guān)系(表),運(yùn)算的對象是關(guān)系(表),運(yùn)算 的結(jié)果是一個新關(guān)系(表)。的結(jié)果是一個新關(guān)系(表)。 v關(guān)系的運(yùn)算包含兩部分,即傳統(tǒng)的集合運(yùn)算和關(guān)系的運(yùn)算包含兩部分,

24、即傳統(tǒng)的集合運(yùn)算和 特殊的關(guān)系運(yùn)算。特殊的關(guān)系運(yùn)算。 v傳統(tǒng)的集合運(yùn)算:傳統(tǒng)的集合運(yùn)算:(并運(yùn)算),(差運(yùn)(并運(yùn)算),(差運(yùn) 算),算),(交運(yùn)算),(交運(yùn)算),(笛卡兒積運(yùn)算)。(笛卡兒積運(yùn)算)。 v5個特殊的關(guān)系運(yùn)算:個特殊的關(guān)系運(yùn)算:(選擇),(選擇),(投影),(投影), (連接),(連接),(除)。(除)。 1. 傳統(tǒng)的關(guān)系運(yùn)算傳統(tǒng)的關(guān)系運(yùn)算 v兩個表的兼容性。所謂兼容,即兩個表的表頭兩個表的兼容性。所謂兼容,即兩個表的表頭 結(jié)構(gòu)相同,且對應(yīng)列的數(shù)據(jù)類型相同。結(jié)構(gòu)相同,且對應(yīng)列的數(shù)據(jù)類型相同。 v并、差、交運(yùn)算都要求有兩個表參加運(yùn)算,并并、差、交運(yùn)算都要求有兩個表參加運(yùn)算,并 且兩個

25、表是兼容的且兩個表是兼容的。 v并運(yùn)算并運(yùn)算:給定兩個兼容的表給定兩個兼容的表R和和S,R和和S并運(yùn)并運(yùn) 算的結(jié)果是一個與算的結(jié)果是一個與R和和S兼容的新表。該表由屬兼容的新表。該表由屬 于于R的所有行加上屬于的所有行加上屬于S的所有行組成,但必須的所有行組成,但必須 刪去重復(fù)的行,記作刪去重復(fù)的行,記作RS。 v并運(yùn)算舉例并運(yùn)算舉例 運(yùn)算含義:包含一年級學(xué)生或獲獎學(xué)生的信息運(yùn)算含義:包含一年級學(xué)生或獲獎學(xué)生的信息 v差運(yùn)算差運(yùn)算:給定兩個兼容的表:給定兩個兼容的表R和和S,R和和S 差運(yùn)算的結(jié)果是一個與差運(yùn)算的結(jié)果是一個與R和和S兼容的新表。兼容的新表。 該表由屬于該表由屬于R而不屬于而不屬

26、于S的所有行組成,的所有行組成, 記作記作R-S。舉例(見下頁)。舉例(見下頁) v交運(yùn)算交運(yùn)算:給定兩個兼容的表:給定兩個兼容的表R和和S,R和和S 交運(yùn)算的結(jié)果是一個與交運(yùn)算的結(jié)果是一個與R和和S兼容的新表,兼容的新表, 該表由既屬于該表由既屬于R又屬于又屬于S的行組成,記作的行組成,記作 RS。舉例(見下頁)。舉例(見下頁) v差運(yùn)算舉例差運(yùn)算舉例 v交運(yùn)算舉例交運(yùn)算舉例 v笛卡兒積笛卡兒積:簡稱積運(yùn)算,也是二元運(yùn)算,即要求簡稱積運(yùn)算,也是二元運(yùn)算,即要求 有兩個表參加運(yùn)算,但這兩個表可以不兼容。有兩個表參加運(yùn)算,但這兩個表可以不兼容。 v笛卡兒積運(yùn)算定義:給定兩個表笛卡兒積運(yùn)算定義:給

27、定兩個表R和和S,R和和S的積的積 運(yùn)算的結(jié)果是一個新表,新表中的行由運(yùn)算的結(jié)果是一個新表,新表中的行由R中的每中的每 一行和一行和S中的每一行組合而成。記作中的每一行組合而成。記作RS。新表。新表 可能包含重復(fù)的列,因此不一定是一個關(guān)系可能包含重復(fù)的列,因此不一定是一個關(guān)系 。 v若若R表有表有m個列,個列,S表有表有n個列,則個列,則RS是一個具是一個具 有(有(m + n)個列的表,且)個列的表,且RS表中的任一行的表中的任一行的 前前m列是列是R表的一個行,后表的一個行,后n列是列是S表的一個行。如表的一個行。如 果果R有有i行,行,S有有j行,則行,則RS有(有(ij)行??梢姡┬小?/p>

28、可見 兩個表的笛卡兒積運(yùn)算結(jié)果會很大。兩個表的笛卡兒積運(yùn)算結(jié)果會很大。 v笛卡兒積運(yùn)算舉例笛卡兒積運(yùn)算舉例 2. 專門的關(guān)系運(yùn)算專門的關(guān)系運(yùn)算 v包含:選擇運(yùn)算、投影運(yùn)算和連接運(yùn)算。包含:選擇運(yùn)算、投影運(yùn)算和連接運(yùn)算。 v選擇運(yùn)算選擇運(yùn)算:從指定的從指定的R表中選擇某些滿足表中選擇某些滿足 條件的行構(gòu)成一個新表。記作條件的行構(gòu)成一個新表。記作F(R) 其中,其中,是選擇運(yùn)算的符號;是選擇運(yùn)算的符號; F 是選擇條件,寫成是選擇條件,寫成的下標(biāo);的下標(biāo); R 寫在括號中,是被選擇的表名。寫在括號中,是被選擇的表名。 舉例:舉例:從從Students表找出所有女同學(xué)的情況表找出所有女同學(xué)的情況 S

29、sex=F(Students) 結(jié)果:結(jié)果: v關(guān)鍵:關(guān)鍵:選擇運(yùn)算的條件表示如下選擇運(yùn)算的條件表示如下 v單個查詢條件單個查詢條件 形式為:形式為:AiAj 其中,其中,Ai、Aj是表是表R中的列名或常量值;中的列名或常量值; 是比較運(yùn)算符,是:是比較運(yùn)算符,是:=、!= 、和和之一。之一。 例如:學(xué)號為例如:學(xué)號為20010102的條件為:的條件為: Sno 20010102 v又 如 : 所 在 系 為 計 算 機(jī) 系 的 條 件 為 :又 如 : 所 在 系 為 計 算 機(jī) 系 的 條 件 為 : Sdept=Computer v多個查詢條件多個查詢條件 用用(邏輯與(邏輯與,也可用也

30、可用and)、)、 (邏輯或(邏輯或, or)、(邏輯非)、(邏輯非, not)構(gòu)成)構(gòu)成 例如:從例如:從Students表找藝術(shù)系的女同學(xué)的情況表找藝術(shù)系的女同學(xué)的情況 Sdept=Art SsexF 等價于:等價于: Sdept=Art and SsexF 表示為:表示為: Sdept=Art and Ssex=F(Students) 結(jié)果:結(jié)果: v投影運(yùn)算投影運(yùn)算:從指定的表從指定的表R中選擇某些列構(gòu)成一中選擇某些列構(gòu)成一 個新表。記作個新表。記作A(R)。)。 v關(guān)鍵確定關(guān)鍵確定A:A是一個列名或多個列名,多個是一個列名或多個列名,多個 列名之間用逗號分隔,列名之間用逗號分隔,A寫

31、作寫作的下標(biāo)。的下標(biāo)。 R被投影的表名。被投影的表名。 v投影結(jié)果表中的重復(fù)行要消除。投影結(jié)果表中的重復(fù)行要消除。 例如:從例如:從Students表中選擇表中選擇Sno、Sname和和 Sdept三個列組成新表的投影運(yùn)算可寫成:三個列組成新表的投影運(yùn)算可寫成: vSno,Sname,Sdept(Students) vSno,Sname,Sdept(Students)結(jié)果:)結(jié)果: v連接運(yùn)算連接運(yùn)算:從從R與與S的笛卡兒積的笛卡兒積RS中選擇滿中選擇滿 足連接條件的行。記作足連接條件的行。記作 : v兩種特殊的連接:等值連接和自然連接。兩種特殊的連接:等值連接和自然連接。 等值連接:等值連接

32、:連接條件用連接條件用=, 則則AB A=B 例例StudentsStudents和和EnrollmentEnrollment的等值連接:的等值連接: = = AB AB( (R RS S) vStudentsStudents和和EnrollmentEnrollment的等值連接的結(jié)果的等值連接的結(jié)果 自然連接自然連接:若等值連接的連接條件中的列名相同,若等值連接的連接條件中的列名相同, 且結(jié)果表中消除了重復(fù)列,則把此種等值連接且結(jié)果表中消除了重復(fù)列,則把此種等值連接 稱為自然連接,記作稱為自然連接,記作RS。 自然連接中不必標(biāo)注連接條件。自然連接中不必標(biāo)注連接條件。 例如:例如:Studen

33、ts表和表和Enrollment表的自然連接表示表的自然連接表示 為:為:StudentsEnrollment。 v自然連接是最常見的連接運(yùn)算。除非有特別的自然連接是最常見的連接運(yùn)算。除非有特別的 聲明,連接一般指的是自然連接。聲明,連接一般指的是自然連接。 v自然連接的執(zhí)行:先計算笛卡兒積、再進(jìn)行選自然連接的執(zhí)行:先計算笛卡兒積、再進(jìn)行選 擇運(yùn)算、最后進(jìn)行投影運(yùn)算,消除重復(fù)的列得擇運(yùn)算、最后進(jìn)行投影運(yùn)算,消除重復(fù)的列得 到結(jié)果到結(jié)果。 v自然運(yùn)算與等值連接的區(qū)別:自然運(yùn)算與等值連接的區(qū)別: 自然連接要求連接的兩個表有相同的列(公共自然連接要求連接的兩個表有相同的列(公共 列),等值連接則不要

34、求。列),等值連接則不要求。 自然連接結(jié)果表中去掉了重復(fù)的列,等值連接自然連接結(jié)果表中去掉了重復(fù)的列,等值連接 卻可能包含重復(fù)的列。卻可能包含重復(fù)的列。 v在關(guān)系數(shù)據(jù)庫中,經(jīng)常是依靠表之間的公共列在關(guān)系數(shù)據(jù)庫中,經(jīng)常是依靠表之間的公共列 把相互獨立的表連接在一起,實現(xiàn)從多個表中把相互獨立的表連接在一起,實現(xiàn)從多個表中 提取所需的信息。提取所需的信息。 v例如:例如: Students、Enrollment、 Courses三表三表 的自然連接,可以實現(xiàn)從選課數(shù)據(jù)庫中提取所的自然連接,可以實現(xiàn)從選課數(shù)據(jù)庫中提取所 需的信息。需的信息。 除法運(yùn)算 運(yùn)算符號是“” 定義: 給定關(guān)系R(X,Y)和S(

35、Y,Z),其中X、Y、Z 為屬性組,但必須出自相同的域。R和S 的除法運(yùn)算得到一個關(guān)系P(X),P是R中滿 足下列條件的元組在X屬性上的投影,即 元組在X上的分量值x的象集Yx包含S在Y 上的投影。 2.4 關(guān)系代數(shù)綜合實例關(guān)系代數(shù)綜合實例 v本 節(jié) 用 到 學(xué) 生 選 課 數(shù) 據(jù) 庫 , 包 括 學(xué) 生本 節(jié) 用 到 學(xué) 生 選 課 數(shù) 據(jù) 庫 , 包 括 學(xué) 生 Students、課程、課程Courses、選課(、選課(Enrollment) 三個表。三個表。 v每個表的的關(guān)系模式如下,數(shù)據(jù)樣本見圖每個表的的關(guān)系模式如下,數(shù)據(jù)樣本見圖2- 1 Students(Sno, Sname, Ss

36、ex, Sage,Sdept) Courses(Cno, Cname, PreCno, Credits) Enrollment(Sno, Cno, Grade) v用關(guān)系代數(shù)表示查詢。解題步驟:用關(guān)系代數(shù)表示查詢。解題步驟: v根據(jù)題意確定要輸出的列以及這些列所在的表,根據(jù)題意確定要輸出的列以及這些列所在的表, 由此確定被操作的表名稱,可能有多個。由此確定被操作的表名稱,可能有多個。 v根據(jù)題意,確定選擇條件以及選擇條件中用到根據(jù)題意,確定選擇條件以及選擇條件中用到 的列在哪個表中,這里又確定一些被操作的表的列在哪個表中,這里又確定一些被操作的表 名稱。名稱。 v根據(jù)根據(jù)1、2兩步確定的表名稱

37、形成所有要操作的兩步確定的表名稱形成所有要操作的 表名集。表名集。 v若表名集中只有一個表,則如果要輸出的列是這若表名集中只有一個表,則如果要輸出的列是這 個表的全部列,就只用選擇運(yùn)算;否則先用選擇,個表的全部列,就只用選擇運(yùn)算;否則先用選擇, 后用投影選取要輸出的(屬性)列。后用投影選取要輸出的(屬性)列。 v如表名集中有兩個或多個表,則一般用自然連接如表名集中有兩個或多個表,則一般用自然連接 將它們連接起來,如果發(fā)現(xiàn)不存在公共列,即幾將它們連接起來,如果發(fā)現(xiàn)不存在公共列,即幾 個表不能進(jìn)行自然連接,則要在表名集中加入一個表不能進(jìn)行自然連接,則要在表名集中加入一 個或多個中間表,中間表中含有

38、能進(jìn)行自然連接個或多個中間表,中間表中含有能進(jìn)行自然連接 的公共列,從而使得表名集中全部表可以進(jìn)行自的公共列,從而使得表名集中全部表可以進(jìn)行自 然連接;將選擇條件作用于自然連接后產(chǎn)生的新然連接;將選擇條件作用于自然連接后產(chǎn)生的新 表上,之后一般用投影操作選取要輸出的列。表上,之后一般用投影操作選取要輸出的列。 實例實例 【例【例2.1】查詢計算機(jī)系學(xué)生的學(xué)號和姓名。】查詢計算機(jī)系學(xué)生的學(xué)號和姓名。 v根據(jù)題目確定要輸出的列為:Sno,Sname,都 在Students表中; v根據(jù)題意,要選擇的是計算機(jī)系的學(xué)生,確定選 擇條件是:Sdept=Computer, 選擇條件中用到的 列Sdept也

39、在Students表中; 1.根據(jù)1,2兩步確定的所有的表名,形成表名集為 Students; v因為表名集中只有一個Students表,并且因為要輸 出的列不是Students表的全部列,則先用選擇,后 用投影選取要輸出的列Sno,Sname。 綜上,該查詢的關(guān)系代數(shù)表達(dá)式為:綜上,該查詢的關(guān)系代數(shù)表達(dá)式為: Sno, ,Sname( ( Sdept=Computer(Students) ) 結(jié)果:結(jié)果: 【例【例2.2】查詢選修了課程號為】查詢選修了課程號為C2的學(xué)生學(xué)號、姓名、的學(xué)生學(xué)號、姓名、 所在系。所在系。 v根據(jù)題目確定要輸出的列為:Sno,Sname, Sdept,都在Stud

40、ents表中; v根據(jù)題意,課程號為C2,則選擇條件是Cno=C2, 因為Cno列在Enrollment表中,所以也用到 Enrollment表; 1.根據(jù)1,2兩步確定用到的表名集為Students, Enrollment; v因為表名集中有兩個表,則用自然連接將它們連 接起來,這兩個表存在共同的列為Sno,可以進(jìn) 行自然連接。將選擇條件Cno=C2作用于自然連 接后產(chǎn)生的新表上,并用投影操作選取要輸出的 列Sno,Sname,Sdept。 綜上,該查詢的關(guān)系代數(shù)表達(dá)式為:綜上,該查詢的關(guān)系代數(shù)表達(dá)式為: Sno,Sname,Sdept(Cno=C2(StudentsEnrollment)

41、結(jié)果:結(jié)果: 【例【例2.3】查詢選修了課程名為】查詢選修了課程名為Database的學(xué)生學(xué)號的學(xué)生學(xué)號 和姓名。和姓名。 v根據(jù)題目確定要輸出的列為:Sno,Sname,都 在Students表中; v根據(jù)題意,課程名為Database,則選擇的條件為 Cname= Database,因為Cname列在Courses表中, 所以也用到Courses表; 1.根據(jù)1,2兩步確定用到的表名集為Students、 Courses; v因為表名集中有兩個表,則要用自然連接將它們 連接起來,但因為這兩表不存在共同的列,不能 進(jìn)行自然連接。因此要加入中間表,中間表中應(yīng) 含有能與其它兩個表進(jìn)行自然連接的公

42、共列,這 個 表 就 是 E n r o l l m e n t 。 將 選 擇 條 件 Cname=Database作用于自然連接后產(chǎn)生的新表 上,并用投影操作選取要輸出的列Sno,Sname。 綜上,該查詢的關(guān)系代數(shù)表達(dá)式為,結(jié)果:綜上,該查詢的關(guān)系代數(shù)表達(dá)式為,結(jié)果: Students.Sno,Sname,(Cname=Database( StudentsEnrollmentCourses) 【例【例2.4】查詢選修了課程名為】查詢選修了課程名為Database的學(xué)生學(xué)號、的學(xué)生學(xué)號、 姓名、成績。姓名、成績。 v根據(jù)題目確定要輸出的列為:Sno,Sname, Grade,其中Sno,S

43、name在Students表中,Grade 列在Enrollment表中,所以用到Students表和 Enrollment表; 1.根據(jù)題意,課程名為Database,則選擇的條件為 Cname=Database,因為Cname列在Courses表中, 所以也用到Courses表; v根據(jù)1,2兩步確定所用到的表名集為Students, Enrollment, Courses; v因為表名集中有三個表,則要用自然連接將它們 連接起來, Enrollment表中含有與Students表公共 的列Sno,含有與Courses表公共的列Cno,從而 這三個表可以實現(xiàn)自然連接。將選擇條件 Cname

44、=Database作用于自然連接后產(chǎn)生的新表 上,并用投影操作選取要輸出的列Sno,Sname, Grade。 綜上,該查詢的關(guān)系代數(shù)表達(dá)式為:綜上,該查詢的關(guān)系代數(shù)表達(dá)式為: Students.Sno,Sname,Grade(Cname= Database( StudentsEnrollmentCourses) 結(jié)果:結(jié)果: 【例【例2.5】將新入學(xué)的學(xué)生信息(】將新入學(xué)的學(xué)生信息( S99205, Sala, F,20, Art)插入)插入Students表中。表中。 分析:可以將這一行數(shù)據(jù)看成由一個元組構(gòu)成的 表,將該表與Students表進(jìn)行并運(yùn)算。 因此,該插入操作可表示為: Stu

45、dents S99205, Sala, F,20, Art 【例【例2.6】將學(xué)生信息】將學(xué)生信息( S99205, Sala, F,20, Art)從從Students表刪除。表刪除。 分析:可以將這行數(shù)據(jù)看成由一個元組構(gòu)成的表, 將Students表與該表進(jìn)行差運(yùn)算。 因此,該刪除操作可表示為: Students - S99205, Sala, F,20, Art 【例【例2.7】求沒有選修課程號為】求沒有選修課程號為C2課程的學(xué)生學(xué)號課程的學(xué)生學(xué)號 分析:可以認(rèn)為是在全部學(xué)號中去掉選修了C2 課程的學(xué)生學(xué)號,就得出沒有選修課程號為C2 的學(xué)生學(xué)號。由于在并、交、差運(yùn)算中,參加 運(yùn)算的關(guān)系要求是兼容的,故應(yīng)當(dāng)先投影、再 行差運(yùn)算。 正確的寫法是:結(jié)果見表2-18。 Sno(Students)Sno(Cno=C2(Enrollemnt) 特別注意,本題不能寫為:特別注意,本題

溫馨提示

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

評論

0/150

提交評論