第2章 關(guān)系數(shù)據(jù)庫(kù)_第1頁(yè)
第2章 關(guān)系數(shù)據(jù)庫(kù)_第2頁(yè)
第2章 關(guān)系數(shù)據(jù)庫(kù)_第3頁(yè)
第2章 關(guān)系數(shù)據(jù)庫(kù)_第4頁(yè)
第2章 關(guān)系數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第2章關(guān)系數(shù)據(jù)庫(kù) 2.1關(guān)系模型的基本概念 2.2關(guān)系代數(shù)和關(guān)系演算 2.3關(guān)系的完整性

2.1關(guān)系模型的基本概念2.1.1數(shù)學(xué)定義 2.1.2關(guān)系數(shù)據(jù)結(jié)構(gòu) 2.1.1數(shù)學(xué)定義(1)

1.域定義2.1域是一組具有相同數(shù)據(jù)類(lèi)型的值的集合。2.笛卡兒積定義2.2給定一組域Dl,D2,…,Dn,Dl,D2,…,Dn的笛卡兒積為:D1×D2×…×Dn={(d1,d2,…dn)|di∈Di,i=1,2,…,n}其中,每一個(gè)元素(d1,d2,…,dn)叫作一個(gè)元組,元素中的每一個(gè)值di叫作一個(gè)分量。3.關(guān)系定義2.3Dl×D2×…×Dn的子集叫作在域Dl,D2,…,Dn上的關(guān)系,用R(Dl,D2,…,Dn)來(lái)表示。2.1.1數(shù)學(xué)定義(2)

4.關(guān)系的性質(zhì)(1)列是同質(zhì)的,即每一列中的分量是同一類(lèi)型的數(shù)據(jù),來(lái)自同一個(gè)域。(2)不同的列可出自同一個(gè)域,稱(chēng)其中的每一列為一個(gè)屬性,不同的屬性要給予不同的屬性名。(3)列的順序無(wú)要求,即列的次序可以任意交換。(4)任意兩個(gè)元組不能完全相同。(5)行的順序無(wú)要求,即行的次序可以任意交換。(6)分量必須取原子值,即每一個(gè)分量都必須是不可再分的數(shù)據(jù)項(xiàng)。2.2關(guān)系代數(shù)和關(guān)系演算2.2.1傳統(tǒng)的集合運(yùn)算 2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算2.2.3關(guān)系演算

2.2.1傳統(tǒng)的集合運(yùn)算(1)

傳統(tǒng)的集合運(yùn)算是二目運(yùn)算,包括并、交、差和廣義笛卡兒積4種運(yùn)算。1.并關(guān)系R與關(guān)系S的并由屬于R或?qū)儆赟的元組組成,其結(jié)果關(guān)系仍為n目關(guān)系。記作R∪S。2.交關(guān)系R與關(guān)系S的交由既屬于R又屬于S的元組組成,其結(jié)果關(guān)系仍為n目關(guān)系。記作R∩S。3.差關(guān)系R與關(guān)系S的差由屬于R而不屬于S的所有元組組成。其結(jié)果關(guān)系仍為n目關(guān)系。記作R-S。4.廣義笛卡兒積兩個(gè)分別為n目和m目的關(guān)系R和S的廣義笛卡兒積是一個(gè)(n+m)列的元組的集合。元組的前n列是關(guān)系R的一個(gè)元組,后m列是關(guān)系S的一個(gè)元組。若R有A1個(gè)元組,S有A2個(gè)元組,則關(guān)系R和關(guān)系S的廣義笛卡兒積有Al×A2個(gè)元組,記作R×S。2.2.1傳統(tǒng)的集合運(yùn)算(2)

【例2-2】有關(guān)系R、S,如(a)、(b)所示,則R∪S、R∩S、R-S、R×S的結(jié)果分別為(c)、(d)、(e)、(f)所示。

(f)2.2.1傳統(tǒng)的集合運(yùn)算(3)2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(1-1)專(zhuān)門(mén)的關(guān)系運(yùn)算包括選擇、投影、連接和除等。1.選擇選擇是在關(guān)系R中選擇滿(mǎn)足給定條件的諸元組,記作:

σF(R)={t|t∈R∧F(t)='真'}其中F表示選擇條件,它是一個(gè)邏輯表達(dá)式,取邏輯值“真”或“假”。因此,選擇運(yùn)算實(shí)際上是從關(guān)系R中選取使邏輯表達(dá)式F為真的元組。這是從行的角度進(jìn)行的運(yùn)算。設(shè)有一個(gè)學(xué)生-課程關(guān)系數(shù)據(jù)庫(kù),包括學(xué)生關(guān)系S、課程關(guān)系C和選修關(guān)系SC,對(duì)這3個(gè)關(guān)系進(jìn)行運(yùn)算。2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(1-2)

2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(1-3)

【例2-3】查詢(xún)數(shù)學(xué)系學(xué)生的信息。sSD=’數(shù)學(xué)系’(S)或s5=’數(shù)學(xué)系’(S)結(jié)果如表2-6所示。

表2-6查詢(xún)數(shù)學(xué)系學(xué)生的信息學(xué)號(hào)S#姓名SN性別SS年齡SA所在系SD000102王博女19數(shù)學(xué)系020101范偉男19數(shù)學(xué)系2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(1-4)

【例2-4】查詢(xún)年齡小于20的學(xué)生的信息。sSA<20(S)或s4<20(S)結(jié)果如表2-7所示。表2-7查詢(xún)年齡小于20的學(xué)生的信息學(xué)號(hào)S#姓名SN性別SS年齡SA所在系SD000101李晨男18信息系000102王博女19數(shù)學(xué)系010101劉思思女18信息系020101范偉男19數(shù)學(xué)系2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(2-1)2.投影關(guān)系R上的投影是從R中選擇出若干屬性列組成新的關(guān)系。記作:ПA(R)={t[A]|t∈R}

其中,A為R中的屬性列。投影操作是從列的角度進(jìn)行的運(yùn)算。投影之后不僅取消了原關(guān)系中的某些列,而且還可能取消某些元組,因?yàn)槿∠四承傩粤泻螅涂赡艹霈F(xiàn)重復(fù)行,應(yīng)取消這些完全相同的行?!纠?-5】查詢(xún)學(xué)生的學(xué)號(hào)和姓名。ПS#,SN(S)或П1,2(S)結(jié)果如表2-8所示。表2-8查詢(xún)學(xué)生的學(xué)號(hào)和姓名學(xué)號(hào)S#姓名SN000101李晨000102王博010101劉思思010102王國(guó)美020101范偉2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(2-2)【例2-6】查詢(xún)學(xué)生的所在系,即查詢(xún)學(xué)生關(guān)系S在所在系屬性上的投影。?SD(S)或?5(S)結(jié)果如表2-9所示。表2-9查詢(xún)結(jié)果所在系SD信息系數(shù)學(xué)系物理系2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(3-1)3.連接它是從兩個(gè)關(guān)系的笛卡兒積中選取屬性間滿(mǎn)足一定條件的元組。

={trts|tr∈R∧ts∈S∧tr[A]θts[B]}連接運(yùn)算從R和S的笛卡兒積R×S中選?。≧關(guān)系)在A屬性組上的值與(S關(guān)系)在B屬性組上的值滿(mǎn)足比較關(guān)系θ的元組。θ為“=”的連接運(yùn)算稱(chēng)為等值連接。

={trts|tr∈R∧ts∈S∧tr[A]=ts[B]}若A、B是相同的屬性組,就可以在結(jié)果中把重復(fù)的屬性去掉。這種在相同的屬性組間進(jìn)行比較并去掉了重復(fù)的屬性的等值連接稱(chēng)為自然連接。

={trts|tr∈R∧ts∈S∧tr[A]=ts[B]}2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(3-2)2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(4-1)4.除R與S的除運(yùn)算得到一個(gè)新的關(guān)系P(X),P是R中滿(mǎn)足下列條件的元組在X屬性列上的投影。(1)關(guān)系R(X,Y)和S(Y,Z),其中X、Y、Z為屬性組(R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集)。(2)元組在X上分量值x的象集Yx包含S在Y上的投影。除操作是同時(shí)從行和列角度進(jìn)行運(yùn)算的。2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(4-2)【例2-8】R(A,B,C)和S(B,C,D)兩個(gè)關(guān)系如表2-13所示,求R÷S。R

S

ABC

BCDa1b1c2

b1c2d1a2b3c7

b2c1d1a3b4c6

b2c3d2a1b2c3

(b)

a4b6c6

a2b2c3

a1b2c1

(a)表2-13

關(guān)系表R和S2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(4-3)則R÷S運(yùn)算如下:a1的象集為{(b1,c2),(b2,c3),(b2,c1)}a2的象集為{(b3,c7),(b2,c3)}a3的象集為{(b4,c6)}a4的象集為{(b6,c6)}S在(B,C)上的投影為:{(b1,c2),(b2,c1),(b2,c3)}因只有a1的象集包含了S在(B,C)屬性組上的投影,故R÷S={a1}除運(yùn)算結(jié)果如表2-14所示。Aa1

表2-14

除運(yùn)算結(jié)果2.2.2專(zhuān)門(mén)的關(guān)系運(yùn)算(5)可以使用選擇、投影、連接和除4種操作來(lái)編輯復(fù)雜的查詢(xún)。以前面的學(xué)生-課程數(shù)據(jù)庫(kù)中的3個(gè)表為例,舉例說(shuō)明它們的綜合用法?!纠?-9】查詢(xún)選修了2號(hào)課程的學(xué)生的學(xué)號(hào)?!纠?-10】查詢(xún)選修了3號(hào)課程的學(xué)生的姓名。

【例2-11】查詢(xún)選修了數(shù)學(xué)課的學(xué)生的姓名和成績(jī)。

∏SN,G(σCN='數(shù)學(xué)'

)2.2.3關(guān)系演算(1-1)

關(guān)系演算是以數(shù)理邏輯中的謂詞演算為基礎(chǔ)的。按謂詞變?cè)牟煌?,關(guān)系演算可分為元組關(guān)系演算和域關(guān)系演算。1元組關(guān)系演算語(yǔ)言—ALPHA元組關(guān)系演算以元組變量作為謂詞變?cè)幕緦?duì)象。操作語(yǔ)句工作空間名(表達(dá)式):操作條件其中操作語(yǔ)句主要有GET、PUT、HOLD、UPDATE、DELETE和DROP六條語(yǔ)句。表達(dá)式用于指定語(yǔ)句的操作對(duì)象,它可以是關(guān)系名或?qū)傩悦?,一條語(yǔ)句可以同時(shí)操作多個(gè)關(guān)系或多個(gè)屬性。2.2.3關(guān)系演算(1-2)仍以學(xué)生—課程數(shù)據(jù)庫(kù)中的3個(gè)表為例。1.檢索操作檢索操作用GET語(yǔ)句實(shí)現(xiàn)。(1)簡(jiǎn)單檢索(即不帶條件的檢索)?!纠?-12】查詢(xún)所有學(xué)生的姓名。GETW(S.SN)【例2-13】查詢(xún)所有學(xué)生的信息。GETW(S)(2)帶條件的檢索?!纠?-14】查詢(xún)信息系學(xué)生的學(xué)號(hào)和年齡。GETW(S.S#,S.SA):S.SD='信息系'【例2-15】查詢(xún)數(shù)學(xué)系年齡小于20的學(xué)生的姓名和年齡。GETW(S.SN,S.SA):S.SD='數(shù)學(xué)系'∧S.SA<202.2.3關(guān)系演算(1-3)(3)帶排序的檢索?!纠?-16】查詢(xún)計(jì)算機(jī)科學(xué)系學(xué)生的學(xué)號(hào)、姓名,并按年齡降序排序。GETW(S.S#,S.SN):S.SD='計(jì)算機(jī)科學(xué)系'DOWNS.SA(4)指定元組個(gè)數(shù)的檢索【例2-17】取出一個(gè)數(shù)學(xué)系學(xué)生的姓名。 GETW(1)(S.SN):S.SD='數(shù)學(xué)系'【例2-18】查詢(xún)信息系年齡最大的3個(gè)學(xué)生的學(xué)號(hào)及其年齡。GETW(3)(S.S#,S.SA):S.SD='信息系'DOWNS.SA2.更新操作(1)插入操作。插入操作用PUT語(yǔ)句實(shí)現(xiàn),其步驟如下:①

用宿主語(yǔ)言在工作空間中建立新元組。②

用PUT語(yǔ)句把該元組存入指定的關(guān)系中。2.2.3關(guān)系演算(1-4)【例2-19】插入一學(xué)號(hào)為020302、姓名為劉青的18歲女生到計(jì)算機(jī)系。MOVE020302TOW.S#MOVE'劉青'TOW.SNMOVE'女'TOW.SSMOVE18TOW.SAMOVE'計(jì)算機(jī)系'TOW.SDPUTW(S)

(2)刪除操作。刪除操作用DELETE語(yǔ)句實(shí)現(xiàn)。其步驟如下:①用HOLD語(yǔ)句把要?jiǎng)h除的元組從數(shù)據(jù)庫(kù)中讀到工作空間中。②用DELETE語(yǔ)句刪除該元組?!纠?-20】刪除學(xué)號(hào)為020302的學(xué)生。HOLDW(S):S.S#='020302'DELETEW【例2-21】刪除全部學(xué)生。HOLDW(S)DELETEW(3)修改操作。2.2.3關(guān)系演算(1-5)①用HOLD語(yǔ)句將要修改的元組從數(shù)據(jù)庫(kù)中讀到工作空間中。②用宿主語(yǔ)言修改工作空間中元組的屬性。③用UPDATE語(yǔ)句將修改后的元組送回?cái)?shù)據(jù)庫(kù)中?!纠?-22】將020101的姓名改為孟偉。HOLDW(S.S#,S.SN):S.S#='020101'MOVE'孟偉'TOW.SNUPDATEW

【例2-23】將020101的學(xué)號(hào)改為030201。HOLDW(S):S.S#='020101'DELETEWMOVE'030201'TOW.S#MOVE'孟偉'TOW.SNMOVE'男'TOW.SSMOVE'19'TOW.SAMOVE'數(shù)學(xué)系'TOW.SDPUTW(S)2.2.3關(guān)系演算(2-1)2域關(guān)系演算語(yǔ)言QBE域關(guān)系演算以元組變量的分量,即域變量作為謂詞變?cè)幕緦?duì)象。QBE(QueryByExample)用示例元素來(lái)表示查詢(xún)結(jié)果可能的例子。下面仍以學(xué)生—課程數(shù)據(jù)庫(kù)為例,說(shuō)明QBE的用法。1.檢索操作(1)簡(jiǎn)單查詢(xún)?!纠?-24】查詢(xún)?nèi)w學(xué)生的姓名。操作步驟如下:①用戶(hù)提出要求。②屏幕顯示空白表格

2.2.3關(guān)系演算(2-2)③用戶(hù)在最左邊一欄輸入關(guān)系名S

④顯示該關(guān)系的欄名SS#SNSSSASD

用戶(hù)構(gòu)造查詢(xún)要求SS#SNSSSASD

P.T

這里T是示例元素,即域變量。QBE要求示例元素下面一定要加下劃線?!癙.”是操作符,表示打?。≒rint),就是顯示。示例元素是這個(gè)域中可能的一個(gè)值,它不必是查詢(xún)結(jié)果中的元素。2.2.3關(guān)系演算(2-3)⑥

屏幕顯示查詢(xún)結(jié)果SS#SNSSSASD

李晨王博劉思思王國(guó)美

2.2.3關(guān)系演算(2-4)【例2-25】查詢(xún)?nèi)w學(xué)生的信息SS#SNSSSASD

P.000101P.李晨P.男P.18P.信息系顯示全部數(shù)據(jù)也可以簡(jiǎn)單地把“P.”操作符作用在關(guān)系名上。SS#SNSSSASDP.

(2)條件查詢(xún)。【例2-26】求信息系全體學(xué)生的姓名SS#SNSSSASD

P.李晨

信息系信息系是查詢(xún)條件,不必加橫線。2.2.3關(guān)系演算(2-5)【例2-28】查詢(xún)數(shù)學(xué)系或者年齡大于19歲的學(xué)生的學(xué)號(hào)。SS#SNSSSASD

P.000101P.000102

>19

數(shù)學(xué)系(3)查詢(xún)結(jié)果排序。【例2-29】查詢(xún)信息系學(xué)生的姓名,要求查詢(xún)結(jié)果按年齡升序排序,對(duì)年齡相同的學(xué)生按性別降序排序。SS#SNSSSASD

P.李晨DO(2)AO(1)信息系2.2.3關(guān)系演算(2-7)2.更新操作(1)插入操作。插入操作符為“I.”,新插入的元組必須具有碼值,其他屬性值可以為空?!纠?-30】把學(xué)號(hào)為000103,姓名張?zhí)m,年齡17歲的信息系女生插入表S.SS#SNSSSASDI.000103張?zhí)m女17信息系(2)刪除操作。

刪除操作符為“D.”?!纠?-31】刪除學(xué)號(hào)為000103的學(xué)生.SS#SNSSSASDD.000103

2.2.3關(guān)系演算(2-8)(3)修改操作。修改操作符為“U.”。關(guān)系的主碼不允許修改,如果需要修改某個(gè)元組的主碼,需首先刪除該元組,然后再插入新的主碼的元組。【例2-32】把000101的年齡改為19歲。SS#SNSSSASD

000101

U.19

SS#SNSSSASDU.000101

19

或【例2-33】把所有學(xué)生的年齡增加1歲。SS#SNSSSASD

U.000101000101

XX+12.3關(guān)系的完整性2.3.1實(shí)體完整性 2.3.2參照完整性 2.3.3用戶(hù)定義的完整性2.3.1實(shí)體完整性規(guī)則2.1實(shí)體完整性規(guī)則:若屬性A是基本關(guān)系R的主屬性,則屬性A不能取空值。例如,在學(xué)生關(guān)系S(S#,SN,SS,SA,SD)中,S#屬性為主碼,則S#不能取空值。實(shí)體完整性規(guī)則規(guī)定,基本關(guān)系的所有主屬性都不能取空值,而不僅是主碼整體不能取空值。例如,學(xué)生選課關(guān)系SC(S#,C#,G),(S#,C#)為主碼,則S#和C#兩屬性都不能取空值。2.3.2參照完整性現(xiàn)實(shí)世界中的實(shí)體之間往往存在某種聯(lián)系,在關(guān)系模型中實(shí)體及實(shí)體間的聯(lián)系都是用關(guān)系來(lái)描述的。這樣就自然存在著關(guān)系與關(guān)系間的引用。學(xué)生(學(xué)號(hào),姓名,性別,年齡,所在系)課程(課程號(hào),課程名,學(xué)分)選修(學(xué)號(hào),課程號(hào),成績(jī))這三個(gè)關(guān)系之間存在著屬性的引用,即選修關(guān)系引用了學(xué)生關(guān)系的主碼“學(xué)號(hào)”和課程關(guān)系的主碼“課程號(hào)”選修關(guān)系中的學(xué)號(hào)值必須是確實(shí)存在的學(xué)生的學(xué)號(hào),即學(xué)生關(guān)系中有該學(xué)生的記錄。選修關(guān)系中的課程號(hào)值也必須是確實(shí)存在的課程號(hào),即課程關(guān)系中有該課程的記錄。不僅兩個(gè)或兩個(gè)以上的關(guān)系間可以存在引用關(guān)系,同一關(guān)系內(nèi)部屬性間也可能存在引用關(guān)系。2.3.2參照完

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論