2023年數據庫系統概論知識點整理_第1頁
2023年數據庫系統概論知識點整理_第2頁
2023年數據庫系統概論知識點整理_第3頁
2023年數據庫系統概論知識點整理_第4頁
2023年數據庫系統概論知識點整理_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一章:緒論數據庫(DB):長期存儲在計算機內、有組織、可共享的大量數據的集合。數據庫中的數據按照一定的數據模型組織、描述和存儲,具有嬌小的冗余度、交稿的數據獨立性和易擴展性,并可為各種用戶共享。數據庫管理系統(DBMS):位于用戶和操作系統間的數據管理系統的一層數據管理軟件。用途:科學地組織和存儲數據,高效地獲取和維護數據。涉及數據定義功能,數據組織、存儲和管理,數據操縱功能,數據庫的事物管理和運營管理,數據庫的建立和維護功能,其他功能。數據庫系統(DBS):在計算機系統中引入數據庫后的系統,一般由數據庫。數據庫管理系統(及其開發工具)、應用系統、數據庫管理員構成。目的:存儲信息并支持用戶檢索和更新所需的信息。數據庫系統的特點:數據結構化;數據的共享性高,冗余度低,易擴充;數據獨立性高;數據由DBMS統一管理和控制。概念模型實體,客觀存在并可互相區別的事物稱為實體。屬性,實體所具有的某一特性稱為屬性。碼,唯一標記實體的屬性集稱為碼。域,是一組具有相同數據類型的值的集合。實體型,具有相同屬性的實體必然具有的共同的特性和性質。實體集,同一類型實體的集合稱為實體集。聯系兩個實體型之間的聯系一對一聯系;一對多聯系;多對多聯系關系模型關系,元組,屬性,碼,域,分量,關系模型關系數據模型的操縱與完整性約束關系數據模型的操作重要涉及查詢,插入,刪除和更新數據。這些操作必須滿足關系完整性約束條件。關系的完整性約束條件涉及三大類:實體完整性,參照完整性和用戶定義的完整性。數據庫系統三級模式結構外模式,模式,內模式模式:(邏輯模式)數據庫中全體數據的邏輯結構和特性的描述,是所有用戶的公共數據視圖。一個數據庫只有一個模式。模式的地位:是數據庫系統模式結構的中間層,與數據的物理存儲細節和硬件環境無關,與具體的應用程序、開發工具及高級程序設計語言無關。模式定義的內容:數據的邏輯結構(數據項的名字、類型、取值范圍等),數據之間的聯系,數據有關的安全性、完整性規定外模式:(子模式/用戶模式)數據庫用戶(涉及應用程序員和最終用戶)可以看見和使用的局部數據庫和邏輯結構和特性的描述,是數據庫用戶的數據視圖,是與某一應用有關的系統的邏輯表達。一個數據庫可以有多個外模式。外模式的地位:介于模式與應用之間模式與外模式的關系:一對多。外模式通常是模式的子集。一個數據庫可以有多個外模式。反映了不同的用戶的應用需求、看待數據的方式、對數據保密的規定。對模式中同一數據,在外模式中的結構、類型、長度、保密級別等都可以不同。外模式與應用的關系:一對多。同一外模式也可認為某一用戶的多個應用系統所使用但一個應用程序只能使用一個外模式內模式:存儲模式或內視圖)是數據物理結構和存儲方式的描述,是數據在數據庫內部實際存儲的表達方式:記錄的存儲方式(順序,B樹,hash方法存儲),索引的組織方式,數據是否壓縮存儲,數據是否加密。數據存儲記錄結構的規定,一個數據庫只有一個內模式三級模式的優點:(1)保證數據的獨立性(內模式與模式分開物理獨立;外模式與模式分開邏輯獨立)(2)簡化用戶窗口(3)有助于數據共享(4)利于數據的安全保密(5)數據存儲由DBMS管理(用戶不用考慮存取途徑等細節)二級映像功能:外模式/模式映像(應用可擴充性)定義外模式(局部邏輯結構)與模式(全局邏輯結構)之間的相應關系,映象定義通常包含在各自外模式的描述中,每一個外模式,數據庫系統都有一個外模式/模式映象。用途:保證數據的邏輯獨立性當模式改變時,數據庫管理員修改有關的外模式/模式映象,使外模式保持不變應用程序是依據數據的外模式編寫的,從而應用程序不必修改,保證了數據與程序的邏輯獨立性,簡稱數據的邏輯獨立性。模式/內模式映像(空間運用率,存取效率)模式/內模式映像是唯一的,它定義了數據全局邏輯結構與存儲結構之間的相應關。數據庫中模式/內模式映象是唯一的。該映象定義通常包含在模式描述中。用途:保證數據的物理獨立性當數據庫的存儲結構改變了(例如選用了另一種存儲結構),數據庫管理員修改模式/內模式映象,使模式保持不變。應用程序不受影響。保證了數據與程序的物理獨立性,簡稱數據的物理獨立性。優點:(1)保證了數據庫外模式的穩定性。(2)從底層保證了應用程序的穩定性,除非應用需求自身發生變化,否則應用程序一般不需要修改。(3)數據與程序之間的獨立性,使得數據的定義和描述可以從應用程序中分離出去。什么叫數據與程序的物理獨立性?什么叫數據與程序的邏輯獨立性?為什么數據庫系統具有數據與程序的獨立性?1、數據與程序的邏輯獨立性:當模式改變時,數據庫管理員修改有關的外模式/模式映象,使外模式保持不變。從而應用程序不必修改,保證了數據與程序的邏輯獨立性,簡稱數據的邏輯獨立性。2、數據與程序的物理獨立性:當數據庫的存儲結構改變了(例如選用了另一種存儲結構),數據庫管理員修改模式/內模式映象,使模式保持不變。應用程序不受影響。保證了數據與程序的物理獨立性,簡稱數據的物理獨立性。數據庫管理系統在三級模式之間錯提供的二層影響保證了數據系統中的數據具有較高的邏輯獨立性和物理獨立性。數據庫系統的組成硬件平臺及數據庫,軟件,人員第二章:關系數據庫關系的完整性約束實體完整性和參照完整性:關系模型必須滿足的完整性約束條件稱為關系的兩個不變性,應當由關系系統自動支持。用戶定義的完整性:應用領域需要遵循的約束條件,體現了具體領域中的語義約束。外碼,主碼,候選碼的概念候選碼:若關系中的某一屬性組的職能唯一地標記一個元組,則稱該屬性組為候選碼。主碼:若一個關系有多個候選碼,則選定期中一個為主碼。外部碼:設F是基本關系R的一個或一組屬性。但不是關系R的碼,假如F與基本關系S的主碼K想相應,則稱F是基本關系R的外部碼,簡稱外碼。關系的3類完整性約束概念實體完整性:若屬性(指一個或一組屬性)A是基本關系R的主屬性,A不能取空值。參照完整性:若屬性(或屬性組)F是基本關系R的外碼,它是基本關系S的主碼K相相應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為:或者取空值(F的每個屬性值均為空值);或者等于S中某個元組的主碼值。用戶定義的完整性:針對某一具體關系數據庫的約束條件。反映某一具體應用所設計的數據必須滿足的語義規定。關系操作的特點,關系代數中的各種運算關系操作的特點是集合操作方式,即操作的對象和結果是集合。關系代數1、并(R∪S)仍為n目關系,由屬于R或屬于S的元組組成。R∪S={t|tR∨tS}2、差(R–S)仍為n目關系,由屬于R而不屬于S的所有元組組成。R-S={t|tR∧tS}3、交(R∩S)仍為n目關系,由既屬于R又屬于S的元組組成。R∩S={t|tR∧tS}R∩S=R–(R-S)4、笛卡爾積R:n目關系,k1個元組;S:m目關系,k2個元組;R×S。9、選擇:選擇又稱為限制(Restriction)σ:對元組按照條件進行篩選。在關系R中選擇滿足給定條件的諸元組σF(R)={t|t?R∧F(t)='真'}。10、投影:投影運算符π的含義:從R中選擇出若干屬性列組成新的關系πA(R)={t[A]|tR}A:R中的屬性列投影操作重要是從列的角度進行運算。但投影之后不僅取消了原關系中的某些列,并且還也許取消某些元組(避免反復行)。11、連接:連接也稱為θ連接:兩張表中的元組有條件的串接。從兩個關系的笛卡爾積中選取屬性間滿足一定條件的元組RS={|trR∧tsS∧tr[A]θts[B]}外連接:假如把舍棄的元組也保存在結果關系中,而在其他屬性上填空值(Null),這種連接就叫做外連接。左外連接:假如只把左邊關系R中要舍棄的元組保存就叫做左外連接(LEFTOUTERJOIN或LEFTJOIN)。右外連接:假如只把右邊關系S中要舍棄的元組保存就叫做右外連接(RIGHTOUTERJOIN或RIGHTJOIN)。12、除÷:給定關系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組;R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集;R與S的除運算得到一個新的關系P(X),P是R中滿足下列條件的元組在X屬性列上的投影第三章:關系數據庫標準語言SQL注意:SQL(Oracle除外)一般不提供修改視圖定義和索引定義的操作,需要先刪除再重建定義基本表:CREATETABLE<表名>(<列名><數據類型>[<列級完整性約束條件>][,<列名><數據類型>[<列級完整性約束條件>]]…[,<表級完整性約束條件>]);列級完整性約束--涉及到該表的一個屬性NOTNULL:非空值約束UNIQUE:唯一性(單值約束)約束PRIMARYKEY:主碼約束DEFAULT<默認值>:默認(缺省)約束Check<(邏輯表達式)>:核查約束,定義校驗條件NOTNULL:非空值約束UNIQUE:唯一性(單值約束)約束PRIMARYKEY:主碼約束DEFAULT<默認值>:默認(缺省)約束Check<(邏輯表達式)>:核查約束,定義校驗條件表級完整性約束--涉及到該表的一個或多個屬性。UNIQUE(屬性列列表):限定各列取值唯一PRIMARYKEY(屬性列列表):指定主碼FOREIGNKEY(屬性列列表)REFERENCES<表名>[(屬性列列表)]Check(<邏輯表達式>):檢查約束PRIMARYKEY與UNIQUE的區別?例:建立“學生”表Student,學號是主碼,姓名取值唯一CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,/*主碼*/SnameCHAR(20)UNIQUE,/*Sname取唯一值*/SsexCHAR(2),SageSMALLINT,SdeptCHAR(20));數據類型修改基本表:ALTERTABLE<表名>[ADD<新列名><數據類型>[完整性約束]][DROP<列名>|<完整性約束名>][ALTERCOLUMN<列名><數據類型>];例:向Student表增長“入學時間”列,其數據類型為日期型ALTERTABLEStudentADDS_entranceDATE;不管基本表中本來是否已有數據,新增長的列一律為空值將年齡的數據類型由字符型(假設本來的數據類型是字符型)改為整數ALTERTABLEStudentALTERCOLUMNSageINT;注:修改原有的列定義有也許會破壞已有數據增長課程名稱必須取唯一值的約束條件。ALTERTABLECourseADDUNIQUE(Cname);直接刪除屬性列:(新標準)例:ALTERTABLEStudentDropSage;刪除基本表:DROPTABLE<表名>[RESTRICT|CASCADE];RESTRICT:(受限)欲刪除的基本表不能被其他表的約束所引用,假如存在依賴該表的對象(觸發器,視圖等),則此表不能被刪除。CASCADE:(級聯)在刪除基本表的同時,相關的依賴對象一起刪除。例:刪除Student表DROPTABLEStudentCASCADE;基本表定義被刪除,數據被刪除;表上建立的索引、視圖、觸發器等一般也將被刪除。刪除索引:DROPINDEX<索引名>;刪除索引時,系統會從數據字典中刪去有關該索引的描述。例:刪除Student表的Stusname索引:DROPINDEXStusname2、數據查詢:基本格式單表查詢選擇表中的若干列(投影)查詢指定列(相稱于πA(R),A=A1,A2,…,An)例;查詢全體學生的學號與姓名SELECTSno,SnameFROMStudent;查詢所有列:在SELECT關鍵字后面列出所有列名按用戶指定順序顯示。將<目的列表達式>指定為*按關系模式中的屬性順序顯示。例:查詢全體學生的具體記錄SELECTSno,Sname,Ssex,Sdept,SageFROMStudent;或SELECT*FROMStudent;P.S:SELECT子句的<目的列表達式>可認為:查詢通過計算的值例:查全體學生的姓名及其出生年份SELECTSname,2023-Sage/*假定當年的年份為2023年*/FROMStudent;輸出結果:Sname2023-Sage李勇?1991劉晨 1992字符串常量、函數例:查詢全體學生的姓名、出生年份和所有系,規定用小寫字母表達所有系名SELECTSname,‘YearofBirth:',2023-Sage,ISLOWER(Sdept)FROMStudent;輸出結果:Sname'YearofBirth:'2023-SageISLOWER(Sdept)李勇YearofBirth:1984?cs劉晨YearofBirth:1985?is列別名SELECTSnameasNAME,'YearofBirth:'asBIRTH,2023-SageasBIRTHDAY,LOWER(Sdept)asDEPARTMENTFROMStudent;輸出結果:NAMEBIRTHBIRTHDAYDEPARTMENT------------------------------------------------------李勇YearofBirth:1991cs劉晨YearofBirth:1992is選擇表中的若干元組(選擇)消除反復性:指定DISTINCT關鍵詞,去掉表中反復的行SELECTDISTINCTSnoFROMSC;注意DISTINCT短語的作用范圍是所有目的列錯誤的寫法SELECTDISTINCTCno,DISTINCTGradeFROMSC;對的的寫法SELECTDISTINCTCno,GradeFROMSC;SELECT子句缺省情況是保存反復元組(ALL),?例:查詢選修了課程的學生學號。SELECTSnoFROMSC;等價于:SELECTALLSnoFROMSC;查詢滿足條件的元組WHERE子句常用的查詢條件(相稱于σF)比較大小使用比較運算符或邏輯運算符NOT+比較運算符例:查詢計算機科學系全體學生的名單SELECTSnameFROMStudentWHERESdept=‘CS’;例:查詢所有年齡在20歲以下的學生姓名及其年齡SELECTSname,SageFROMStudentWHERESage<20;//NOTSage>=20擬定范圍BETWEEN…AND…NOTBETWEEN…AND…例;查詢年齡在20~23歲(涉及20歲和23歲)之間的學生的姓名、系別和年齡SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;//Sage>=20andSage<=23例:查詢年齡不在20~23歲之間的學生姓名、系別和年齡SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;//Sage<20orSage>23擬定集合IN<值表>,NOTIN<值表>例:查詢信息系(IS)、數學系(MA)和計算機科學系(CS)學生的姓名和性別SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS');例:查詢既不是信息系、數學系,也不是計算機科學系的學生的姓名和性別SELECTSname,SsexFROMStudentWHERESdeptNOTIN('IS','MA','CS');自負匹配[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]匹配串為固定字符串例:查詢學號為的學生的具體情況。SELECT*SELECT*FROMStudent等價于:FROMStudentWHERESnoLIKE‘';WHERESno='';匹配串為含通配符的字符串%:代表任意長度(可以是0)的字符串_:代表任意單個字符字符串自身就具有%或_時,在%或_之前加上轉義符“\”要使用ESCAPE‘<換碼字符>’將通配符轉義為普通字符。假如‘\’要作為一個普通字符,用連續兩個‘\’表達一個真正的‘\’。例:查詢以"DB_"開頭,且倒數第3個字符為i的課程的具體情況。SELECT*FROMCourseWHERECnameLIKE'DB\_%i__'ESCAPE'\‘;涉及空值的查詢ISNULL或ISNOTNULL“IS”不能用“=”代替例:查所有有成績的學生學號和課程號SELECTSno,CnoFROMSCWHEREGradeISNOTNULL;多重條件查詢:AND和OR來聯結多個查詢條件,AND的優先級高于OR,可以用括號改變優先級,可用來實現多種其他謂詞。[NOT]IN[NOT]BETWEEN…AND…改寫例:查詢信息系(IS)、數學系(MA)和計算機科學系(CS)學生的姓名和性別SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS')可改寫為:SELECTSname,SsexFROMStudentWHERESdept='IS'ORSdept='MA'ORSdept='CS'ORDERBY子句:對查詢結果排序可以按一個或多個屬性列排序:升序:ASC;降序:DESC;缺省值為升序。當排序列含空值時:空值最大ASC:排序列為空值的元組最后顯示;DESC:排序列為空值的元組最先顯示。例:查詢選修了3號課程的學生的學號及其成績,查詢結果按分數降序排列SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;聚集函數:對查詢結果集中的某列進行計算或記錄。計數COUNT([DISTINCT|ALL]*)COUNT([DISTINCT|ALL]<列名>)計算總和SUM([DISTINCT|ALL]<列名>) 計算平均值AVG([DISTINCT|ALL]<列名>)最大最小值MAX([DISTINCT|ALL]<列名>)MIN([DISTINCT|ALL]<列名>)例:查詢學生選修課程的總學分數SELECTSUM(Ccredit)FROMSC,CourseWHERSno=''ANDSC.Cno=Course.Cno;注:除Count(*),都要跳過空值;Where子句不能使用聚集函數。GROUPBY子句:對查詢結果分組。用途細化聚集函數的作用對象未對查詢結果分組,聚集函數將作用于整個查詢結果對查詢結果分組后,聚集函數將分別作用于每個組使用GROUPBY后:其SELECT子句的列名列表中只能出現分組屬性和集函數。假如分組后還要按照條件對這些組進行篩選,可使用having短語指定篩選條件例:查詢選修了3門以上課程的學生學號SELECTSnoFROMSCGROUPBYSnoHAVINGCOUNT(*)>3;例:查詢有3門以上課程是90分以上學生的學號及(90分以上的)課程數

SELECTSno,COUNT(*)FROMSCWhereGrade>90GROUPBYSnoHAVINGCOUNT(*)>3;HAVING短語與WHERE子句的區別:作用對象不同WHERE子句作用于基表或視圖,從中選擇滿足條件的元組HAVING短語作用于組,從中選擇滿足條件的組。****連接查詢*****p100頁****嵌套查詢*****p104頁***重點***數據更新(1)插入數據插入元組INSERT[INTO]<表名>[(<屬性列1>[,<屬性列2>…)]VALUES(<常量1>[,<常量2>]…)功能:將新元組插入指定表中;新元組的屬性列1的值為常量1,屬性列2的值為常量2,…。INTO子句:屬性列的順序可與表定義中的順序不一致,但須指定列名;沒有指定屬性列,表達要插入的是一條完整的元組;指定部分屬性列,未指定的屬性列取空值,具有NOTNULL的屬性列除外。VALUES子句:提供的值必須與INTO子句匹配,值的個數,值的類型。例:將一個新學生元組(學號:;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中INSERTINTOStudent(Sno,Sname,Ssex,Sdept,Sage)VALUES('','陳冬','男','IS',18);例:將學生張成民的信息插入到Student表中INSERTINTOStudentVALUES(‘’,‘張成民’,‘男’,18,'CS');例:插入一條選課記錄('','1')。INSERTINTOSC(Sno,Cno)VALUES(‘’,‘1’);RDBMS將在新插入記錄的Grade列上自動地賦空值。或者:INSERTINTOSCVALUES(‘’,‘1’,NULL);由于沒有指出SC的屬性名,在GRADE列上要明確給出空值插入子查詢結果InsertInto<表名>[(<屬性列1>[,<屬性列2>…)]子查詢(select等);(2)修改數據UPDATE<表名>SET<列名>=<表達式>[,<列名>=<表達式>]…[WHERE<條件>];SET子句:指定修改方式,要修改的列,修改后取值:<表達式>。WHERE子句:指定要修改的元組,,缺省表達要修改表中的所有元組。功能:修改指定表中滿足WHERE子句條件的元組。修改某一個元組的值例:將學生的年齡改為22歲UPDATEStudentSETSage=22WHERESno='';修改多個元組的值例:將所有學生的年齡增長1歲UPDATEStudentSETSage=Sage+1;帶子查詢的修改語句子查詢須放在比較運算符之后例:將計算機科學系全體學生的成績置零。UPDATESCSETGrade=0WHERE'CS'=(SELETESdeptFROMStudentWHEREStudent.Sno=SC.Sno);(3)刪除數據DELETEFROM<表名>[WHERE<條件>];功能:刪除指定表中滿足WHERE子句條件的元組。WHERE子句:指定要刪除的元組;缺省表達要刪除表中的所有元組,表的定義仍在數據字典中。刪除某一個元組的值例:刪除學號為的學生記錄DELETEFROMStudentWHERESno=';刪除多個元組的值例:刪除所有的學生選課記錄DELETEFROMSC;帶子查詢的刪除語句例:刪除計算機科學系所有學生的選課記錄DELETEFROMSCWHERE'CS'=(SELETESdeptFROMStudentWHEREStudent.Sno=SC.Sno);4、視圖特點:虛表,是從一個或幾個基本表(或視圖)導出的表;只存放視圖的定義,不存放視圖相應的數據;基表中的數據發生變化,從視圖中查詢出的數據也隨之改變。基于視圖的操作:查詢、刪除、受限更新、定義基于該視圖的新視圖。(1)定義視圖建立視圖CREATEVIEW<視圖名>[(<列名>[,<列名>]…)]AS<子查詢>[WITHCHECKOPTION];子查詢:不允許具有ORDERBY子句和DISTINCT短語。WITHCHECKOPTION:表達對視圖進行UPDATE,INSERT和DELETE操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)。組成視圖的屬性列名:所有省略或所有指定,但在下列三種情況下必須明確指定組成視圖的所有列名:某個目的列不是單純的屬性名,而是聚集函數或列表達式;多表連接時選出了幾個同名列作為視圖的字段;需要在視圖中為某個列啟用新的名字。RDBMS執行CREATEVIEW語句時只是把視圖定義存入數據字典,并不執行其中的SELECT語句。在對視圖查詢時,按視圖的定義從基本表中將數據查出。行列子集視圖:從單個基本表導出,只是去掉了基本表的某些行和某些列保存了主碼例:建立信息系學生的視圖CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept=‘IS’;WITHCHECKOPTION例:建立信息系學生的視圖,并規定進行修改和插入操作時仍需保證該視圖只有信息系的學生CREATEVIEWIS_StudentASSELECTSno,Sname,SageFROMStudentWHERESdept='IS'WITHCHECKOPTION;加上了WITHCHECKOPTION子句:RDBMS對IS_Student視圖的更新操作:修改操作:自動加上Sdept='IS'的條件;刪除操作:自動加上Sdept='IS'的條件;插入操作:自動檢查Sdept屬性值是否為'IS'。假如不是,則拒絕該插入操作。假如沒有提供Sdept屬性值,則自動定義Sdept為'IS'。基于多個基表的視圖例:建立信息系選修了1號課程的學生視圖CREATEVIEWIS_S1(Sno,Sname,Grade)ASSELECTStudent.Sno,Sname,GradeFROMStudent,SCWHERESdept='IS'ANDStudent.Sno=SC.SnoANDSC.Cno='1';基于視圖的視圖例:建立信息系選修了1號課程且成績在90分以上的學生的視圖CREATEVIEWIS_S2ASSELECTSno,Sname,GradeFROMIS_S1WHEREGrade>=90;由于視圖中的數據不會實際存儲,所以定義視圖時可根據應用的需要,設立一些派生屬性列或虛擬列,以便于查詢和記錄。以SELECT*方式創建的視圖可擴充性差,應盡也許避免。缺陷:修改基表Student的結構后,Student表與F_Student視圖的映象關系被破壞,導致該視圖不能對的工作。刪除視圖DROPVIEW<視圖名>;該語句從數據字典中刪除指定的視圖定義。假如該視圖上還導出了其他視圖,使用CASCADE級聯刪除語句,把該視圖和由它導出的所有視圖一起刪除。刪除基表時,由該基表導出的所有視圖定義都必須顯式地使用DROPVIEW語句刪除。例:刪除視圖BT_S:DROPVIEWBT_S;刪除視圖IS_S1:拒絕執行級聯刪除:DROPVIEWIS_S1CASCADE;(2)查詢視圖:查詢視圖與查詢基本表相同,視圖定義后,就可以像對待基本表同樣對視圖進行查詢(SELECT)操作。視圖消解法(ViewResolution)進行有效性檢查,檢查查詢的表、視圖等是否存在。假如存在,則從數據字典中取出視圖的定義;轉換成等價的對基本表的查詢,把視圖定義中的子查詢與用戶的查詢結合起來;執行修正后的查詢。例:在信息系學生的視圖中找出年齡小于20歲的學生SELECTSno,SageFROMIS_StudentWHERESage<20;視圖消解轉換后的查詢語句為:SELECTSno,SageFROMStudentWHERESdept='IS'ANDSage<20;例:在S_G視圖中查詢平均成績在90分以上的學生學號和平均成績SELECT*FROMS_GWHEREGavg>=90;S_G視圖的子查詢定義:CREATEVIEWS_G(Sno,Gavg)ASSELECTSno,AVG(Grade)FROMSCGROUPBYSno;(3)更新視圖DBMS實現視圖更新的方法:轉換為對基本表的更新。視圖消解法(ViewResolution)。只有對成為“可更新”視圖才干進行更新操作。SQL2對“可更新”視圖給出正式定義:從關系R選出某些屬性(用select而不是selectdistinct)定義的視圖,R自身可以是可更新的視圖;Where中不能嵌套涉及R的子查詢;Select必須涉及足夠多的屬性,所有notnull的屬性必須涉及。對于視圖元組的更新操作(INSERT、DELETE、UPDATA),有以下三條規則:假如一個視圖是從多個基本表使用聯接操作導出的,那么不允許對這個視圖執行更新操作。假如在導出視圖的過程中,使用了分組和聚集函數操作,也不允許對這個視圖執行更新操作。行列子集視圖可以執行更新操作。在SQL2中,允許更新的視圖在定義時,必須加上“WITHCHECKOPTION”短語。DBMS在更新視圖時會進行檢查,防止用戶通過視圖對不屬于視圖范圍內的基本表數據進行更新。例:將信息系學生視圖IS_Student中學號的學生姓名改為“劉辰”。UPDATEIS_StudentSETSname='劉辰'WHERESno='';轉換后的語句:UPDATEStudentSETSname='劉辰'WHERESno=''ANDSdept='IS';例:向信息系學生視圖IS_S中插入一個新的學生記錄:,趙新,20歲INSERTINTOIS_StudentVALUES(‘95029’,‘趙新’,20);轉換為對基本表的更新:INSERTINTOStudent(Sno,Sname,Sage,Sdept)VALUES(‘','趙新',20,'IS');例:刪除信息系學生視圖IS_Student中學號為的記錄DELETEFROMIS_StudentWHERESno='';轉換為對基本表的更新:DELETEFROMStudentWHERESno=''ANDSdept='IS';更新視圖的限制:一些視圖是不可更新的,由于對這些視圖的更新不能唯一地故意義地轉換成對相應基本表的更新。對其他類型視圖的更新不同系統有不同限制:(1)若視圖是由兩個以上基本表導出的,則此視圖不允許更新(2)若視圖的字段來自字段表達式或常數,則不允許對此視圖執行INSERT和UPDATE操作,但允許執行DELETE操作。(3)若視圖的字段來自集函數,則此視圖不允許更新。(4)若視圖定義中具有GROUPBY子句,則此視圖不允許更新。(5)若視圖定義中具有DISTINCT短語,則此視圖不允許更新。(6)若視圖定義中有嵌套查詢,并且內層查詢的FROM子句中涉及的表也是導出該視圖的基本表,則此視圖不允許更新。(7)一個不允許更新的視圖上定義的視圖也不允許更新第四章:數據庫的安全性計算機系統的三類安全性問題技術安全,管理安全,政策法律數據庫安全性控制(6種)用戶標記與鑒別用戶標記,口令存取控制3.自主存取控制方法:定義各個用戶對不同數據對象的存取權限。當用戶要訪問數據庫時,一方面要檢查其存取權限,以防止非法用戶對數據庫進行存取。“自主存取控制”中“自主”的含義:用戶可以將自己所擁有的存取權限“自主”地授予別人,即用戶具有一定的“自主”權。4.授權與收回語句。GRANT語句和REVOKE語句實現關系數據庫系統中存取控制權限:1、GRANT(授權)GRANT語句的一般格式:GRANT<權限>[,<權限>]...ON<對象類型><對象名>,[<對象類型><對象名>]TO<用戶>[,<用戶>]...[WITHGRANTOPTION];將對指定操作對象的指定操作權限授予指定的用戶發出GRANT:DBA,數據庫對象創建者(即屬主Owner),擁有該權限的用戶接受權限的用戶:一個或多個具體用戶;PUBLIC(全體用戶)。例:把查詢Student表權限授給用戶U1GRANTSELECTONTABLEStudentTOU1;例:把查詢Student表和修改學生學號的權限授給用戶U4GRANTUPDATE(Sno),SELECTONTABLEStudentTOU4;對屬性列的授權時必須明確指出相應屬性列名2、REVOKE:授予的權限可以由DBA或其他授權者用REVOKE語句收回REVOKE語句的一般格式為:REVOKE<權限>[,<權限>]...ON<對象類型><對象名>>[,<對象類型><對象名>]…FROM<用戶>[,<用戶>]...>[CASCADE|RESTRICT];把指定對象的指定操作權限從指定用戶處收回。例:把用戶U4修改學生學號的權限收回REVOKEUPDATE(Sno)ONTABLEStudentFROMU4;例:收回所有用戶對表SC的查詢權限REVOKESELECTONTABLESCFROMPUBLIC;例:把用戶U5對SC表的INSERT權限收回REVOKEINSERTONTABLESCFROMU5CASCADE;(缺省是RESTRICT)將用戶U5的INSERT權限收回的時候必須級聯(CASCADE)收回,由于U5將SC的INSERT權限授予U6,U6又將其授予U7,CASCADE系統只收回直接或間接從U5處獲得的權限。Grant和Revoke向用戶授予或收回對數據的操作權限3、創建數據庫模式的權限:DBA在創建用戶時實現CREATEUSER語句格式CREATEUSER<username>[WITH][DBA|RESOURCE|CONNECT]擁有DBA權限的用戶是系統中的超級用戶;只有系統的超級用戶才有權創建新的數據庫用戶;假如沒有指定創建的新用戶的權限,默認該用戶擁有CONNECT權限,只能登錄數據庫.。數據庫角色角色的創建,給角色授權,將一個角色授予其他角色或用戶強制存取控制方法:每一個數據對象被(強制地)標以一定的加密級別,每位用戶也被(強制地)授予某一級別的許可證。系統規定只有具有某一許可證級別的用戶才干存取加密級別的數據對象。強制存取控制(MAC)是對數據自身進行密級標記,無論數據如何復制,標記與數據是一個不可分的整體,只有符合密級標記規定的用戶才可以操縱數據,從而提高了更高級別的安全性。第五章:數據庫的完整性看書。。。實體完整性(定義)參照完整性用戶定義完整性第六章:關系數據理論1、函數依賴:設R(U)是一個屬性集U上的關系模式,X和Y是U的子集,若對于R(U)的任意一個也許的關系r,r中不也許存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱“X函數擬定Y”或“Y函數依賴于X”,記作X→Y。所謂函數依賴是指關系中屬性或屬性組的值可以決定其它屬性的值,設R(U)是屬性集U上的關系模式,X、Y是U的子集:假如X和Y之間是1:1關系(一對一關系),如學校和校長之間就是1:1關系,則存在函數依賴X→Y和Y→X。假如X和Y之間是1:n關系(一對多關系),如年齡和姓名之間就是1:n關系,則存在函數依賴Y→X。假如X和Y之間是m:n關系(多對多關系),如學生和課程之間就是m:n關系,則X和Y之間不存在函數依賴。在關系模式R(U)中,對于U的子集X和Y,假如X→Y,但YX,則稱X→Y是非平凡的函數依賴;若X→Y,但YX,則稱X→Y是平凡的函數依賴。例:在關系SC(Sno,Cno,Grade)中,非平凡函數依賴:(Sno,Cno)→Grade;平凡函數依賴:(Sno,Cno)→Sno(Sno,Cno)→Cno若X→Y,則X稱為這個函數依賴的決定屬性組,也稱為決定因素(Determinant)。2、完全函數依賴:在R(U)中,假如X→Y,并且對于X的任何一個真子集X’,都有X’Y,則稱Y對X完全函數依賴,記作。3、部分函數依賴:若X→Y,但Y不完全函數依賴于X,則稱Y對X部分函數依賴,記作例:中(Sno,Cno)→Grade是完全函數依賴,(Sno,Cno)→Sdept是部分函數依賴∵Sno→Sdept成立,且Sno是(Sno,Cno)的真子集。當存在部分依賴時,就會產生數據冗余。4、傳遞函數依賴:在R(U)中,假如X→Y,(YX),YX,Y→Z,ZY,則稱Z對X傳遞函數依賴,記為:注:假如Y→X,即X←→Y,則Z直接依賴于X。例:在關系Std(Sno,Sname,Sdept,Mname)中,有:Sno→Sdept,Sdept→MnameMname傳遞函數依賴于Sno5、侯選碼:設K為R<U,F>中的屬性或屬性組,若KU(每個屬性),則K稱為R的侯選碼(CandidateKey)注K滿足兩個條件:1.K完全函數決定該關系的所有其它屬性。2.K的任何真子集都不能完全函數決定R的所有其它屬性,K必須是最小的。若候選碼多于一個,則選定其中的一個做為主碼(PrimaryKey),通常稱之為碼。主屬性(Primeattribute):包含在任何一個候選碼中的屬性。非主屬性或非碼屬性:不包含在任何碼中的屬性。例:關系模式S(Sno,Sdept,Sage),單個屬性Sno是碼,SC(Sno,Cno,Grade)中,(Sno,Cno)是碼由于碼能唯一擬定一個元組,所以關系的碼函數決定該關系的所有屬;一個關系中的所有屬性都函數依賴于該關系的碼。例:關系模式R(P,W,A)P:演奏者W:作品A:聽眾:一個演奏者可以演奏多個作品,某一作品可被多個演奏者演奏,聽眾可以欣賞不同演奏者的不同作品。碼為(P,W,A),即All-Key6、外部碼:關系模式R中屬性或屬性組X并非R的碼,但X是另一個關系模式的碼,則稱X是R的外部碼(Foreignkey)也稱外碼如在SC(Sno,Cno,Grade)中,Sno不是碼,但Sno是關系模式S(Sno,Sdept,Sage)的碼,則Sno是關系模式SC的外部碼主碼與外部碼一起提供了表達關系之間聯系的手段各種范式之間存在聯系:1、1NF:假如一個關系模式R的所有屬性都是不可分的基本數據項,則R∈1NF第一范式是對關系模式的最起碼的規定。不滿足第一范式的數據庫模式不能稱為關系數據庫;簡而言之,第一范式就是無反復的列,關系數據庫研究的關系都是規范化的關系。但是滿足第一范式的關系模式并不一定是一個好的關系模式。例:關系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)Sloc為學生住處,假設每個系的學生住在同一個地方。函數依賴涉及:(Sno,Cno)FGrade(Sno,Cno)PSdept∵Sno→Sdept(Sno,Cno)PSloc∵Sdept傳遞SlocS-L-C的碼為(Sno,Cno)。S-L-C滿足第一范式。非主屬性Sdept和Sloc部分函數依賴于碼(Sno,Cno)。插入異常:如未選課的學生不能插入。刪除異常:如放棄修一門課,只選修這-門課的學生被刪除數據冗余度大修改復雜因素:存在對碼的冗余依賴。Sdept、Sloc部分函數依賴于碼。解決方法:S-L-C分解為兩個關系模式,以消除這些部分函數依賴SC(Sno,Cno,Grade)S-L(Sno,Sdept,Sloc)2、2NF;若R∈1NF,且每一個非主屬性完全函數依賴于碼,則R∈2NF簡而言之,第二范式就是每一行被碼唯一標記例:S-L-C(Sno,Sdept,Sloc,Cno,Grade)∈1NFS-L-C(Sno,Sdept,Sloc,Cno,Grade)∈2NF SC(Sno,Cno,Grade)∈2NFS-L(Sno,Sdept,Sloc)∈2NF采用投影分解法將一個1NF的關系分解為多個2NF的關系,可以在一定限度上減輕原1NF關系中存在的插入異常、刪除異常、數據冗余度大、修改復雜等問題。但將一個1NF關系分解為多個2NF的關系,并不能完全消除關系模式中的各種異常情況和數據冗余。3、3NF:關系模式R<U,F>中若不存在這樣的碼X、屬性組Y及非主屬性Z(ZY),使得X→Y,Y→X,Y→Z成立,即每個非主屬性都不傳遞依賴于R的碼,則稱R<U,F>∈3NF。若R∈3NF,則每一個非主屬性既不部分依賴于碼也不傳遞依賴于碼。簡而言之,第三范式(3NF)規定一個數據庫表中不能包含其它表中已包含的非碼信息。例:S-L(Sno,Sdept,Sloc)∈2NFS-L(Sno,Sdept,Sloc)∈3NFS-D(Sno,Sdept)∈3NFD-L(Sdept,Sloc)∈3NF假如R∈3NF,則R也是2NF。局部依賴和傳遞依賴是模式產生數據冗余和操作異常的兩個重要因素。由于3NF模式中不存在非主屬性對候選碼的局部依賴和傳遞依賴,因此一定限度上上解決原2NF關系中存在的插入異常、刪除異常、數據冗余度大、修改復雜等問題具有較好的性能。將一個2NF關系分解為多個3NF的關系后,仍然不能完全消除關系模式中的各種異常情況和數據冗余。4、BC范式(BCNF):關系模式R<U,F>∈1NF,若X→Y且YX時X必具有碼,即每個屬性都不傳遞依賴于R的碼,則R<U,F>∈BCNF。等

溫馨提示

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

評論

0/150

提交評論