版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、軟件開發(fā)技術(shù)基礎(chǔ),顧 剛計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心,第4章 數(shù)據(jù)庫及應(yīng)用程序開發(fā)講課8學(xué)時 實(shí)驗(yàn)4學(xué)時,案例1:雅虎網(wǎng)站,,,雅虎網(wǎng)站,,案例2:火車訂票系統(tǒng),,全國各個地區(qū)火車車次信息,可以想象數(shù)據(jù)量很大。假如西安火車站每天始發(fā)車次200列,每列火車15×120,信息記錄36000條。又假如全國有100個像西安的城市,則系統(tǒng)每天要處理的數(shù)據(jù)量達(dá)到300萬條。,案例3:大學(xué)教學(xué)管理系統(tǒng),,某大學(xué)的全校性選修課門數(shù)有180多門,
2、選修學(xué)生人次達(dá)到1.5萬/每學(xué)期。假定每位學(xué)生最多允許選3門,每門課最多允許300人選,全?,F(xiàn)有學(xué)生3萬多,每位學(xué)生都有自己專業(yè)的若干必修課。,需要專門的管理平臺去解決上面問題!,計(jì)算機(jī)怎樣去組織、存儲和管理這樣海量的數(shù)據(jù)信息?,數(shù)據(jù)庫概念回顧,數(shù)據(jù)?數(shù)據(jù)處理?數(shù)據(jù)庫?數(shù)據(jù)庫管理系統(tǒng)?數(shù)據(jù)庫系統(tǒng)?,指描述客觀事物的信息符號的總稱,這些信息符號能輸入到計(jì)算機(jī)中存儲起來,又能被處理,指對數(shù)據(jù)進(jìn)行收集、整理、組織、存儲、加工(增刪改)、傳輸、
3、檢索的各個過程總稱,指對數(shù)據(jù)庫進(jìn)行管理(定義、增、刪、改、查詢等)的軟件系統(tǒng)DBMS,指長期存儲在計(jì)算機(jī)內(nèi)的有組織的可共享的數(shù)據(jù)集合,由硬件、操作系統(tǒng)、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、應(yīng)用程序、數(shù)據(jù)庫管理員等部分組成,數(shù)據(jù)庫概念回顧,實(shí)體?屬性?關(guān)鍵字(碼)?關(guān)系?實(shí)體三種聯(lián)系?,客觀世界存在的任何事物稱為實(shí)體,指一個實(shí)體的所有特征稱為屬性,笛卡爾積D1×D2×…×Dn的子集稱為在N個域D1, D2,…, Dn上的
4、一個關(guān)系,俗稱二維表格為關(guān)系,指唯一能夠標(biāo)識實(shí)體的一個或一組屬性稱為關(guān)鍵字或碼,一對一、一對多、多對多。分別舉例?,數(shù)據(jù)庫概念回顧,描述實(shí)體間聯(lián)系的工具?三種數(shù)據(jù)模型?,層次模型、網(wǎng)狀模型、關(guān)系模型。分別舉例?,現(xiàn)實(shí)世界:事物的客觀存在,由事物及其性質(zhì)反映信息世界:是對現(xiàn)實(shí)世界的抽象,事物在信息世界中稱為實(shí)體。實(shí)體是由屬性來描述的。反映事物及其之間聯(lián)系的模型稱為(實(shí)體)概念模型。數(shù)據(jù)世界:信息的數(shù)據(jù)化。用記錄和數(shù)據(jù)項(xiàng)分別描述信息
5、世界中的實(shí)體及屬性。實(shí)體模型數(shù)據(jù)化后數(shù)據(jù)模型,數(shù)據(jù)庫概念回顧,現(xiàn)實(shí)世界中萬物之間必然存在多種聯(lián)系或者是實(shí)體內(nèi)部的聯(lián)系,或者是實(shí)體之間的聯(lián)系實(shí)體之間各種各樣的聯(lián)系歸納起來有三種方式: 一對一(1:1) 一對多(1:n) 多對多(m:n)注意指不同類實(shí)體之間的聯(lián)系,數(shù)據(jù)庫概念回顧,,“一對一”聯(lián)系是最常見、最簡單的聯(lián)系例如:實(shí)體集“
6、本市房屋”中的實(shí)體“房屋” 實(shí)體集“本市居民家庭”中的實(shí)體“家庭”一般來說,每個家庭只住一套房屋、一套房屋住一戶家庭但要注意的是“一對一”聯(lián)系不一定是“一一對應(yīng)”聯(lián)系,前者不排除如新造的房屋尚沒分配或剛組建的家庭還未分配到房子等情況,“一對一”聯(lián)系,,“一對多”聯(lián)系也是最常見的。例如實(shí)體學(xué)校和實(shí)體學(xué)生之間的聯(lián)系。一個學(xué)校有許多學(xué)生,但一個學(xué)生只就讀于一所學(xué)校。,,,實(shí)體E11實(shí)體E12實(shí)體E13實(shí)體E14實(shí)體
7、E15,,實(shí)體E21實(shí)體E22實(shí)體E23實(shí)體E24實(shí)體E25實(shí)體E26實(shí)體E27實(shí)體E28實(shí)體E29,,,,,,,,,,,,,,,,,,“一對多”聯(lián)系,“多對多”聯(lián)系是一種較為復(fù)雜的聯(lián)系。實(shí)體集E1中的實(shí)體可以和實(shí)體集E2中的任意多個實(shí)體間有聯(lián)系,反之亦然。例如在學(xué)校中教師和學(xué)生之間的聯(lián)系:一個教師給多個學(xué)生上課,而一個學(xué)生可以同時選修幾個教師的課。,,“多對多”聯(lián)系,,,用E-R圖(ENTITY-RELATIONS
8、HIP)來描述實(shí)體、屬性及實(shí)體之間的聯(lián)系。,,,,實(shí)體 聯(lián)系 屬性,概念模型的表示方法,E-R圖舉例1,E-R圖舉例2,供應(yīng)商,項(xiàng)目,企業(yè),零件,供應(yīng),,,,,項(xiàng)目名,負(fù)責(zé)人,工期,零件號,零件名,庫存量,企業(yè)名,法人名,地址,,,,,,,電話,產(chǎn)品名,資產(chǎn),,,,,,,課程,教師,學(xué)生,教學(xué),,,,E-R圖舉例3,姓名,學(xué)號,成績
9、,姓名,職稱,學(xué)科,,,,,,,,,課程實(shí)體集與教師實(shí)體集 多對多聯(lián)系,課程實(shí)體集與學(xué)生實(shí)體集 多對多聯(lián)系,在數(shù)據(jù)庫中,由于采用的數(shù)據(jù)模型不同,相應(yīng)的DBMS也就完全不同,目前常用的三種數(shù)據(jù)模型是:層次模型、網(wǎng)狀模型、關(guān)系模型。因此目前流行的三種主要類型數(shù)據(jù)庫系統(tǒng)分別是層次、網(wǎng)狀和關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。,三種數(shù)據(jù)模型,“一對多”、“一對一”聯(lián)系可以直接用層次模型來描述,但“多對多”聯(lián)系不能直
10、接用層次模型來表示,必須通過一些數(shù)學(xué)變換把“多對多”聯(lián)系拆成幾個“一對多”聯(lián)系后再用層次模型表示。雖然層次模型有一定局限性,但由于其簡單、清晰,還是有許多數(shù)據(jù)庫管理系統(tǒng)根據(jù)層次模型來設(shè)計(jì),這樣一來的DBMS稱為層次型數(shù)據(jù)庫管理系統(tǒng)。在現(xiàn)實(shí)世界中有大量實(shí)體間聯(lián)系可以用層次模型來描述。,,層次模型,,在網(wǎng)狀模型中各實(shí)體之間的聯(lián)系用有向圖表示。由于樹型結(jié)構(gòu)可以看成是有向圖的特例,所以網(wǎng)狀模型要比層次模型復(fù)雜,但它可以直接用于表示“多對多聯(lián)系”
11、。然而由于技術(shù)上的困難,一些已實(shí)現(xiàn)的網(wǎng)狀數(shù)據(jù)庫管理系統(tǒng)(如DBTG)中仍然只允許處理“一對多”聯(lián)系。,教師,班級,學(xué)生,課程,網(wǎng)狀模型,,,,,,,在手工處理(沒有使用計(jì)算機(jī)以前)的實(shí)際工作中。人們經(jīng)常使用表格進(jìn)行業(yè)務(wù)管理。也就是說把實(shí)體之間的聯(lián)系繪制成表格。 例如旅館管理,除了旅客登記表以外,旅館本身最重要的資源:客房的有關(guān)數(shù)據(jù)也可以制成如下一張表格。,,關(guān)系模型,,實(shí)體集“旅客”和“房間”之間的聯(lián)系,即住宿關(guān)系也可使用表格來表示
12、??梢钥闯鲇帽砀衲軌虮硎尽耙粚σ弧?、“一對多”的實(shí)體聯(lián)系。實(shí)際上用表格也可以表示“多對多”的實(shí)體間聯(lián)系。,,,關(guān)系模型--表格描述,,目前實(shí)際使用的數(shù)據(jù)庫系統(tǒng)大多是關(guān)系數(shù)據(jù)庫,下面重點(diǎn)討論域(Domain):相同類型數(shù)據(jù)元素值的集合。 比如自然數(shù)集合、小寫字母集合笛卡爾積:設(shè)有一組域D1, D2,…, Dn ,則笛卡爾乘積為 D1×D2×…×Dn ={( d1, d2,…,
13、dn)| di ∈Di,i=1,2,…,n}元組(Tuple):笛卡爾乘積中每一個元素( d1, d2,…, dn)稱為 一個元組(n元組),關(guān)系數(shù)據(jù)庫系統(tǒng),域 D1=學(xué)生集合(Student)={張寧,李健,王鵬}, 域 D2=計(jì)算機(jī)語言課程集合(Language)={C++,OP,JAVA}, 域 D3=修課類別(Lesson)={必修課,選修課}, 笛卡爾積 D1
14、15; D2 × D3 = {(張寧,C++,必修課), (張寧,C++,選修課), (張寧,OP,必修課), (張寧,OP,選修課), (張寧,JAVA,必修課),(張寧,JAVA,選修課), (李健,C++,必修課), (李健,C++,選修課), (李健,OP,必修課), (李健,OP,選修課),
15、 (李健,JAVA,必修課),(李健,JAVA,選修課), (王鵬,C++,必修課), (王鵬,C++,選修課), (王鵬,OP,必修課), (王鵬,OP,選修課), (王鵬,JAVA,必修課),(王鵬,JAVA,選修課) }。,笛卡爾積實(shí)例,,,通常用關(guān)系來表示實(shí)體及其之間的聯(lián)系。關(guān)系可以用二維表來表示。每一行為一個元組,每一列為一個域,每一列
16、也可以稱為一個屬性,屬性具有對應(yīng)的名稱,稱為屬性名。,比如在D1 × D2 × D3中只選出與學(xué)生張寧有關(guān)的內(nèi)容就構(gòu)成一個關(guān)系R(D1, D2, D3),關(guān)系:D1×D2×…×Dn的子集稱為域D1, D2,…, Dn上的一個關(guān) 系,記作 R(D1, D2,…, Dn),或簡記為R。,,笛卡爾積子集,關(guān)系模式-----指一個關(guān)系中的所有屬性名。 記為:〈關(guān)系名〉(屬性名1
17、,屬性名2, …… 屬性名N)例: SLL(Student,Language,Lesson) shop(店名,地址,法人名,經(jīng)營者名,電話) fruit(水果名,價格,庫存量,質(zhì)量等級) book(書名,著者名,出版地,出版社,價格,頁數(shù),開本, ISBN,分類號,版本) student(姓名,學(xué)號,性別,宿舍,電話) 電話號碼簿(電話號碼,姓名)
18、注意上述關(guān)系模式中,哪些是關(guān)鍵字、哪些是外碼?,數(shù)據(jù)庫概念回顧,數(shù)據(jù)庫概念回顧,數(shù)據(jù)模型是概念模型(實(shí)體模型)的數(shù)據(jù)化,關(guān)系模型是三種數(shù)據(jù)模型之一,也是目前最為流行的數(shù)據(jù)模型,關(guān)系模型=關(guān)系模式(數(shù)據(jù)結(jié)構(gòu))+數(shù)據(jù)操縱+完整性約束,關(guān)系模式指一個關(guān)系中的所有屬性名數(shù)據(jù)操縱=查詢操作+更新操作 查詢操作:選擇、投影、連接、并、交、差 更新操作:增、刪、改完整性約束=實(shí)體完整性+參照完整性+用戶定義完整性 實(shí)體完
19、整性指關(guān)系中關(guān)鍵字不為空且唯一,見表4-1 參照完整性指外碼的刪除,出現(xiàn)數(shù)據(jù)不完整性,見表4-2,將圖書館大量圖書數(shù)據(jù)和大量讀者數(shù)據(jù)建立關(guān)系模型數(shù)據(jù)庫,假設(shè)我們設(shè)計(jì)的一個關(guān)系模式如下表所示:,圖書館如何建數(shù)據(jù)庫,對于這樣的關(guān)系表,如果具體分析可以發(fā)現(xiàn)如下問題: 1、數(shù)據(jù)的冗余度大:重復(fù)數(shù)據(jù)太多,占用較多存儲空間 2、插入異常:新購圖書,如果無讀者借,就無法登記該書的信息 3、刪除異常:當(dāng)讀者還某書時,該書
20、的信息也刪除掉了; 4、更新異常:當(dāng)某讀者單位變更時,需修改數(shù)據(jù),如果改錯,找不到讀者,注意:上表中的關(guān)鍵字是證號和書名兩個屬性組成,實(shí)際上我們所建立關(guān)系的二維表一般具有如下特性:1、每一列中的屬性值是同類型的數(shù)據(jù),即來自同一個域;2、不同的列要給予不同的屬性名,但可以出自同一個域;3、任意兩個元組在各屬性值上不能完全相同;4、每一個屬性必須是不可再分的數(shù)據(jù)項(xiàng);5、行、列次序是無關(guān)緊要的。 但是一個關(guān)系的二
21、維表僅具有這些特性是不夠的。需要對關(guān)系再增加一些條件限制,使其避免出現(xiàn)數(shù)據(jù)冗余、插入異常、刪除異常和修改異常等問題。,分析圖書館的數(shù)據(jù)表,通常稱存在問題的關(guān)系為不規(guī)范關(guān)系,所以要將關(guān)系模式規(guī)范化。我們要優(yōu)化關(guān)系模式,從而使關(guān)系模式越來越合理。在此先搞清楚范式的概念。 范式(Normal Form)是滿足某種條件的關(guān)系模式的集合。 關(guān)系模式根據(jù)要求的不同,或者說規(guī)范化的程度的不同,可
22、以進(jìn)一步劃分為一范式、二范式、三范式、Boyce-Codd范式、四范式和五范式,分別記為1NF、2NF、3NF、BCNF、4NF和5NF。 當(dāng)我們說“關(guān)系R是3NF”時,就表示為R∈3NF。 各種范式之間存在以下包含關(guān)系: 1NF?2NF?3NF?BCNF?4NF?5NF,數(shù)據(jù)庫規(guī)范化理論,數(shù)據(jù)依賴,學(xué)號→姓名 課程號→課程名 (學(xué)號,課程號)→成績 還有嗎? 一個學(xué)號只對應(yīng)一個學(xué)生,換句
23、話說知道學(xué)號就知道姓名,反之不然。因此稱姓名函數(shù)依賴于學(xué)號;或者說學(xué)號函數(shù)決定姓名。記作學(xué)號→姓名,一個關(guān)系中屬性值之間存在的互相依賴和互相制約的條件或因素,或者說一個關(guān)系中屬性之間存在著相互聯(lián)系,我們稱之為數(shù)據(jù)依賴。屬性之間依賴關(guān)系類似于數(shù)學(xué)中的函數(shù)。,函數(shù)依賴定義,設(shè)在關(guān)系R中,X和Y為R中的兩個屬性,如果每個X值只有一個Y值與之對應(yīng),則稱屬性Y函數(shù)依賴于屬性X;或稱屬性X(函數(shù))決定屬性Y,記作X→Y。,上表中學(xué)號決定其它5個屬性
24、,函數(shù)依賴再定義,設(shè)有關(guān)系模式R(A1,A2,A3,…… AK),X和Y均為{ A1,A2,A3,…… AK }的子集,r 是R 的任意具體關(guān)系,u 、v 是r 中的任意兩個元組。u (X)、v(X)分別表示元組u 、v 在X上的屬性值。u (Y)、v(Y)分別表示元組u 、v 在Y上的屬性值。如果存在u(X)=v(X),則有u(Y)=v(Y),那么稱X函數(shù)決定Y,或稱Y函數(shù)依賴于X,記為X ? Y。,分析下表中的屬性依賴?,學(xué)號→姓名
25、 課程號→課程名 (學(xué)號,課程號)→成績 還有嗎?,(證號,書名) ? 日期 完全OR部分?(證號,書名) ? 單位 完全OR部分?,在關(guān)系模式R中,如果X?Y,并且對于X的任何一個真子集X′,都有X′?Y不成立,則稱Y完全函數(shù)依賴于X。否則稱Y部分函數(shù)依賴于X。,完全函數(shù)依賴,分析下表傳遞依賴情況:,學(xué)號→學(xué)院→院地址,在關(guān)系模式R中,如果X?Y,Y X,Y?Z,則稱Z對X傳遞函數(shù)依賴。,傳遞函數(shù)依賴,
26、,,1NF的定義:如果關(guān)系模式R的每個屬性值都是基本數(shù)據(jù)項(xiàng), 即為不可再分的數(shù)據(jù)項(xiàng),則稱R為第一范式(1NF)。 分析書215頁例子,見表7-18不是1NF 解決辦法:元組重復(fù)就拆開。屬性可拆開就拆開;使生成的關(guān)系 模式滿足1NF。 2NF的定義:如果關(guān)系模式R為第一范式(即R∈ 1NF),
27、并且 任意一個非主屬性都完全函數(shù)依賴于R的任一候選碼, 則稱R為第二范式(2NF)。 分析書216頁例子,見表7-19不是2NF 注意:只要使關(guān)系模式滿足2NF,就可以避免1NF中由于存在 非主屬性對候選碼的部分函數(shù)依賴而產(chǎn)生的插入異常和
28、 刪除異常的問題。 解決辦法:利用投影運(yùn)算把1NF分解成若干新的關(guān)系模式。使其 滿足2NF。,3NF的定義:如果關(guān)系模式R ∈2NF,且它的任何一個非主屬性都 不傳遞函數(shù)依賴于R的候選碼,則稱R為第三范式 (3NF)。 分析書217頁例子,見表7-21是2NF,但不滿足3N
29、F。 注意:2NF仍然存在插入異常和刪除異常 解決辦法:利用投影運(yùn)算把2NF分解成若干新的關(guān)系模式, 使其滿足3NF。BCNF的定義:當(dāng)關(guān)系模式R ∈1NF,且對于R的每個函數(shù)依賴 X ?Y,且X不包含Y時,都有X比含有R的候選碼, 則稱R為BC范式(BCNF)。 注意:滿足BC
30、NF的關(guān)系模式具有下述特點(diǎn): 1)所有非主屬性對每一個候選碼都是完全函數(shù)依賴 2)所有非主屬性對每一個不包含它的碼也是完全函數(shù)依賴,關(guān)系模式S(no, department,dean,course, grade),觀察下面關(guān)系表格,是否為1NF?,在關(guān)系模式R中,如果所有屬性都是基本數(shù)據(jù)項(xiàng),則稱1NF。,范式(Normal Form)是滿足某種條件的關(guān)系模式的集合。,一范式1NF定義,將一
31、個元組拆開為多個元組,1NF存在數(shù)據(jù)冗余、插入、刪除異?,F(xiàn)象。,二范式2NF定義,?分析上表(no, course)是關(guān)鍵字?(no, course)部分決定dean和department?拆分為N_C(no,course,grade)和N_D (no,department, dean),如果R是1NF,且每個非主屬性都完全函數(shù)依賴于關(guān)鍵字,則R是2NF。,在N_C中,(no, course)是主關(guān)鍵字。(no, course)完全
32、決定grade,設(shè)計(jì)符合二范式,在N_D中,no是主關(guān)鍵字,no完全決定department 和dean,三范式3NF定義,如果R是2NF,并且每個非主屬性都不傳遞函數(shù)依賴于關(guān)鍵字,則R是3NF,根據(jù)定義N_C(no,course,grade)是3NF,根據(jù)定義N_D(no,department, dean)不是3NF,N_D1,D_D,將N_D(no,department, dean)拆分為N_D_1(no,department)和D
33、_D(department, dean),設(shè)計(jì)符合三范式,非規(guī)范化關(guān)系,1NF,2NF,3NF,BCNF,4NF,5NF,,,,,,,消去重復(fù)元組,消除部分函數(shù)依賴,消除傳遞函數(shù)依賴,消除部分和傳遞函數(shù)依賴,消除多值依賴,消除連接依賴,關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL,SQL(structured query language)結(jié)構(gòu)化查詢語言,結(jié)構(gòu)化查詢語言包括三部分:數(shù)據(jù)定義語言DDL數(shù)據(jù)操縱語言DML數(shù)據(jù)控制語言DCL,DDL用來定義
34、數(shù)據(jù)庫的結(jié)構(gòu)(即各種各樣的表) 1、定義各種表(關(guān)系模式) 每個表的列屬性名稱及類型的定義 2、輸入數(shù)據(jù),修改數(shù)據(jù) 3、修改表的結(jié)構(gòu),如增加列 4、定義候選碼,建立索引,DML用來維護(hù)數(shù)據(jù)庫中的數(shù)據(jù),即對表中數(shù)據(jù)進(jìn)行各種處理 1、表中數(shù)據(jù)查詢 select 2、在表中插入一行數(shù)據(jù)(一條記錄、一個元組)insert 3、在表中刪除一行數(shù)據(jù)(一條記錄、一個元組)delete 4、在表中更改
35、一行數(shù)據(jù)(一條記錄、一個元組)update,DCL用來保護(hù)數(shù)據(jù)庫的安全操作 1、授權(quán)給用戶 grant 2、回收授權(quán) revoke,SQL三級模式結(jié)構(gòu),建立表,定義表的語句格式為: CREATE TABLE ([NOT NULL][UNIQUE] [,[NOT NULL][UNIQUE]],…);,CREATE TABLE employee(eid CHAR(6) NO
36、T NULL PRIMARY KEY,name VARCHAR(8) NOT NULL),age NUMERIC(3,0),country VARCHAR(10) NULL),參見例4-1、4-2,插入記錄,?INSERT INTO employee(eid, name, age, country) VALUES (‘3018’, ‘zhang’, 28, ‘China’)? INSERT INT
37、O employee VALUES (‘3056’, ‘wang’, 35, ‘USA’)? INSERT INTO employee(eid, name, country) VALUES (‘4025’, ‘li’, ‘Russia’),插入記錄的語句格式為: INSERT INTO 表名 ([列名表]) VALUES (值表),參見例4-29,修改記錄,UPDATE employee SET
38、name=’Li Ming’WHERE eid=’4025’UPDATE employee SET name=’Zhang Li’,age=36,country=’USA’WHERE eid=’3056’可以修改多個字段的值。如果不帶WHERE修改所有的記錄,修改記錄的語句格式為: UPDATE SET =[,=]… WHERE ,參見例4-33、4-34,刪除記錄,DELETE em
39、ployee WHERE eid=’3018’,刪除記錄的語句格式為: DELETE FROM [ WHERE ];,參見例4-31、4-32,查詢記錄,查詢記錄的語句格式為: SELECT [ALL | DISTINCT] FROM [WHERE] [GROUP BY [ HAVING ] [ORDER BY [ ASC | DESC];,?語句第一部分指明要選取的列。各列由逗號
40、分開,他們之間的順序可以與表中的順序不一致。?FROM子句指明要從哪個(些)表中查詢數(shù)據(jù)。?WHERE子句指明要選擇滿足什么條件的記錄。?GROUP子句將結(jié)果按“列名1”的值進(jìn)行分組,該屬性列值相等的元組分為一個組,每個組產(chǎn)生結(jié)果中的一條記錄。如果帶有HAVING短語,則只有滿足指定條件的組才輸出。?ORDER子句將結(jié)果按“列名2”的值升序(降序)排序。,查詢舉例,?SELECT pub_id, pub_name, cou
41、ntry FROM publishers? SELECT * FROM publishers,參見例4-11、4-12,SELECT city, state FROM authersSELECT DISTICT city, state FROM authers,查詢舉例,刪除表格中重復(fù)的行(元組)DISTICT,參見例4-14、4-15,?SELECT title_id, type, price, price-
42、price*0.3 FROM title ?SELECT au_lname+’.’+au_fname, city+’.’+state FROM authors,查詢舉例,計(jì)算表達(dá)式的查詢,參見例4-13,條件:= = != price>45.3country=’China’ NOT AND OR Country=’China’ AND age>35,查詢舉例,
43、帶有篩選條件的查詢,?SELECT title_id, type, price, price - price*0.3 FROM titles WHERE price - price*0.3>18? SELECT pub_id, pub_name FROM publishers WHERE country=’USA’ AND state=’CA’,查詢舉例,參見例4-15到4
44、-22,字符串中%表示匹配任意字符串 字符串中_表示匹配任意一個字符SELECT au_lname+’.’+au_fname, city+’.’+stateFROM authorsWHERE au_fname LIKE ‘D%’SELECT au_lname+’.’+au_fname, city+’.’+stateFROM authorsWHERE au_id LIKE ‘72_-%’,查詢舉例,
45、帶有LIKE子句的查詢,一般格式為: 列名 LIKE 字符串常數(shù),,通常返回的結(jié)果是隨機(jī)排列的。 SELECT stor_name, cityFROM storesORDER BY store_name,查詢舉例,帶有結(jié)果排序ORDER子句的查詢,一般格式為: ORDER BY 字段表,SELECT stor_name, cityFROM storesORDER BY
46、store_name DESC SELECT stor_name, cityFROM storesORDER BY store_name ASC,升序和降序排列結(jié)果,SELECT stor_name, cityFROM storesORDER BY stor_name, city 用多個列排列。 SELECT stor_name, cityFROM storesORDER
47、 BY state用不出現(xiàn)的列。,查詢舉例,,SUM(expression)AVG( expression )MIN( expression )MAX( expression )COUNT( expression ) COUNT(*),查詢舉例,使用庫函數(shù)進(jìn)行統(tǒng)計(jì)查詢,常用庫函數(shù)如下:,SELECT AVG(price)FROM titles SELECT MAX(price)FROM titl
48、esWHERE type=’business’,,查詢舉例,SELECT AVG(qty), SUM(qty), COUNT(DISTICT stor_id)FROM sales SELECT COUNT(*)FROM publishersWHERE state=’CA’,,查詢舉例,SELECT type, AVG(price), SUM(price), COUNT(*)FROM ti
49、tlesWHERE type in ('business', 'mod_cook', 'trad_cook')GROUP BY type,查詢舉例,使用結(jié)果分組子句查詢,一般格式如下: GROUP BY 分組列名表 [HAVING 條件],SELECT type, pub_id, AVG(price), SUM(price), COUNT(*)F
50、ROM titlesWHERE type in (‘business’, ‘mod_cook’, ‘trad_cook’)GROUP BY type, pub_id,查詢舉例,對GROUP的分組結(jié)果再進(jìn)一步篩選。 SELECT type, AVG(price), SUM(price), COUNT(*)FROM titlesWHERE price>$10GROUP BY type
51、SELECT type, AVG(price), SUM(price), COUNT(*)FROM titlesWHERE price>$10GROUP BY typeHAVING AVG(price)>$20,多表查詢,(a)笛卡爾乘積SELECT title_id, au_fnameFROM titles, authors SELECT titles.title
52、_id, titles.title, titleauthor.au_id FROM titles, titleauthor,別名查詢,SELECT t.title_id, t.title, ta.au_id FROM titles t, titleauthor ta SELECT t.title_id, t.title, ta.au_id FROM titles t, titleauthor taWHE
53、RE t.title_id=ta.title_id,篩選查詢,SELECT t.title_id, a.au_id FROM titles t, titleauthor ta, authors aWHERE t.title_id=ta.title_id and ta.au_id=a.au_id,視圖,CREATE VIEW au_viewASSELECT au_id, au_fname, au_lnameF
54、ROM authorsCREATE VIEW author_titleASSELECT t.title_id, a.au_id FROM titles t, titleauthor ta, authors aWHERE t.title_id=ta.title_id and ta.au_id=a.au_id,SQL建立視圖的語句格式為:CREATE VIEW [([,]…)] AS ,視圖查詢,SELECT
55、* FROM au_viewSELECT t.title_id, a.au_id FROM titles t, titleauthor ta, authors aWHERE t.title_id=ta.title_id and ta.au_id=a.au_id,刪除視圖,DROP VIEW 視圖名 DROP VIEW a_authors,索引的建立和刪除,索引類型按照存儲位置:聚集索引和非
56、聚集索引。按照關(guān)鍵字值是否唯一:唯一索引和非唯一所以。,建立索引,一般語句格式如下:CREATE [UNIQUE] [CLUSTERED | NOCLUSTERED ] INDEX 索引名ON 表名 (列名表)CREATE UNIQUE INDEX id_index ON authors (au_id),建立索引舉例,CREATE INDEX id_index ON authors (
57、 au_fname DESC,au_id)CREATE CLUSTERED INDEX id_index ON authors ( au_fname DESC,au_id),刪除索引,DROP INDEX 表名.索引名 DROP INDEX authors.id_index,數(shù)據(jù)庫安全性,(1)添加數(shù)據(jù)庫用戶 SP_GRANTDBACCESS 有登錄權(quán)的帳戶名 SP_GRANTDBACCESS
58、 [li\xin](2)刪除數(shù)據(jù)庫用戶 SP_REVOKEDBACCESS 帳戶名 SP_REVOKEDBACCESS [li\li],數(shù)據(jù)庫設(shè)計(jì),需求分析,概念設(shè)計(jì),邏輯結(jié)構(gòu)設(shè)計(jì),物理結(jié)構(gòu)設(shè)計(jì),數(shù)據(jù)庫實(shí)施,數(shù)據(jù)庫設(shè)計(jì)分下列階段:,需求分析,詳細(xì)調(diào)查要處理的對象了解原系統(tǒng)工作概況確定新系統(tǒng)的功能考慮今后可能的擴(kuò)充和改變信息要求 要從數(shù)據(jù)庫中獲得信息的內(nèi)容與性質(zhì)處理要求 要完成什么處理功能,
59、對處理的響應(yīng)時間有什么要求。安全性與完整性要求,概念設(shè)計(jì),將現(xiàn)實(shí)世界(指應(yīng)用領(lǐng)域)抽象為具有屬性的實(shí)體以及聯(lián)系。畫出一張張ER圖,就得到了一個對系統(tǒng)信息的初步描述,進(jìn)而形成數(shù)據(jù)庫的概念模型。,邏輯結(jié)構(gòu)設(shè)計(jì),將概念結(jié)構(gòu)轉(zhuǎn)化為一般的關(guān)系模型。將轉(zhuǎn)化來的關(guān)系模型向特定DBMS支持下的數(shù)據(jù)模型轉(zhuǎn)換。對數(shù)據(jù)模型進(jìn)行優(yōu)化,數(shù)據(jù)庫邏輯模型的產(chǎn)生,一個實(shí)體型轉(zhuǎn)換為一個關(guān)系模式。實(shí)體的屬性就是關(guān)系的屬性,實(shí)體的碼就是關(guān)系的碼。,一個獨(dú)立的關(guān)系模式:
60、各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,每個實(shí)體的碼均是該關(guān)系的候選碼。 與一端的關(guān)系模式合并:在該關(guān)系模式的屬性中加入另一個關(guān)系模式的碼和聯(lián)系本身的屬性。,一個1對l聯(lián)系,,方案1 職工(職工號,姓名,年齡)產(chǎn)品(產(chǎn)品號,產(chǎn)品名,價格)負(fù)責(zé)(職工號,產(chǎn)品號),,方案2職工(職工號,姓名,年齡,產(chǎn)品號) 產(chǎn)品(產(chǎn)品號,產(chǎn)品名,價格)方案3職工(職工號,姓名,年齡)產(chǎn)品(產(chǎn)品號,產(chǎn)品名,價格,職工號)方案
61、3比較合理,一個1對n聯(lián)系,一個獨(dú)立的關(guān)系模式:與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均換為關(guān)系的屬性,而關(guān)系的碼為n端實(shí)體的碼與n端對應(yīng)的關(guān)系模式合并:聯(lián)系本身的屬性均換為關(guān)系的屬性,再加1端實(shí)體的碼,,方案1: 1:n聯(lián)系形成的關(guān)系獨(dú)立存在。 倉庫(倉庫號,地點(diǎn),面積) 產(chǎn)品(產(chǎn)品號,產(chǎn)品名,價格) 倉儲(倉庫號,產(chǎn)品號,數(shù)量),,方案2: 聯(lián)系形成的關(guān)系與n端對象合并倉庫(倉庫號,地點(diǎn),面積)產(chǎn)品
62、(產(chǎn)品號,產(chǎn)品名,價格,倉庫號,數(shù)量)方案2較優(yōu),m:n聯(lián)系,一個m:n聯(lián)系轉(zhuǎn)換為一個關(guān)系模式。與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性。而關(guān)系的碼為各實(shí)體碼的組合。,,學(xué)生(學(xué)號,姓名,年齡,性別); 課程(課程號,課程名,學(xué)時數(shù)); 選修(學(xué)號,課程號,成績)。,,,供應(yīng)商(供應(yīng)商號,供應(yīng)商名,地址)零件(零件號,零件名,單價)產(chǎn)品(產(chǎn)品號,產(chǎn)品名,型號)供應(yīng)(供應(yīng)商號,零件號,產(chǎn)品號,
63、數(shù)量),,三個及以上實(shí)體間聯(lián)系,三個或三個以上實(shí)體間的一個多元聯(lián)系轉(zhuǎn)換為一個關(guān)系模式。與該多元聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性。而關(guān)系的碼為各實(shí)體碼的組合。,,方案1:轉(zhuǎn)換為兩個關(guān)系模式。 職工(職工號,姓名,年齡) 領(lǐng)導(dǎo)(領(lǐng)導(dǎo)工號,職工號)方案2:轉(zhuǎn)換為一個關(guān)系模式。 職工(職工號,姓名,年齡,領(lǐng)導(dǎo)工號),,同一實(shí)體集聯(lián)系,按上述1:1,1:n和m:n三種情況分別處理。,,零件(零件號,
64、名稱,價格)組裝(組裝件號,零件號,數(shù)量),,數(shù)據(jù)模型的優(yōu)化,以規(guī)范化理論為指導(dǎo) (1)確定數(shù)據(jù)依賴。按需求分析,寫出各屬性之間的數(shù)據(jù)依賴。(2)考查是否存在部分函數(shù)依賴、傳遞函數(shù)依賴等,確定各關(guān)系模式分別屬于第幾范式。(3)按照需求分析對數(shù)據(jù)處理的要求,確定是否需要對它們進(jìn)行合并或分解。,設(shè)計(jì)用戶模式,利用視圖功能設(shè)計(jì)更符合局部用戶需要的用戶外模式。(1)使用更符合用戶習(xí)慣的別名(2)針對不同級別的用戶定義不同的外模式,
65、以滿足系統(tǒng)對安全性的要求。,數(shù)據(jù)庫物理設(shè)計(jì)及實(shí)施,物理設(shè)備上的存儲結(jié)構(gòu)與存取方法稱為數(shù)據(jù)庫的物理結(jié)構(gòu) 1.確定數(shù)據(jù)的存儲結(jié)構(gòu)綜合考慮存取時間、存儲空間利用率和維護(hù)代價3方面的因素。2.設(shè)計(jì)數(shù)據(jù)的存取路徑在關(guān)系數(shù)據(jù)庫中,選擇存取路徑主要是指確定如何建立索引。,建立索引原則,一個(組)屬性經(jīng)常在操作條件中出現(xiàn)。一個(組)屬性經(jīng)常作為聚集函數(shù)的參數(shù)。一個(組)屬性經(jīng)常在連接操作的連接條件中出現(xiàn)。,建立聚簇索引原則,檢索數(shù)據(jù)時,常以
66、某個(組)屬性作為排序、分組條件。檢索數(shù)據(jù)時,常以某個(組)屬性作為檢索限制條件,并返回大量數(shù)據(jù)。表中某個(組)的值重復(fù)性較大。,確定數(shù)據(jù)的存放位置,數(shù)據(jù)庫數(shù)據(jù)備份、日志文件備份等,可以考慮存放在磁帶上。可以考慮將表和索引分別放在不同的磁盤上。在查詢時,由于兩個磁盤驅(qū)動器分別在工作,因而可以保證物理讀寫速度比較快。,確定系統(tǒng)配置,同時使用數(shù)據(jù)庫的用戶數(shù)同時打開的數(shù)據(jù)庫對象數(shù)使用的緩沖區(qū)長度、個數(shù)時間片大小裝填因子,數(shù)據(jù)庫的
67、實(shí)施,(1)定義數(shù)據(jù)庫結(jié)構(gòu)(2)數(shù)據(jù)裝載,數(shù)據(jù)庫編程,數(shù)據(jù)庫編程指用高級語言程序中直接處理數(shù)據(jù)庫具體數(shù)據(jù)庫連接技術(shù)如下:,?ODBC Open DataBase Connectivity 開放數(shù)據(jù)庫連接?OLE DB Object Linking and Embedding DataBAse 對象連接和嵌入數(shù)據(jù)庫?ADO ActiveX Data
68、 Object ActiveX控件數(shù)據(jù)對象?JDBC Java DataBase Connetivity JAVA數(shù)據(jù)庫連接,微軟公司ODBC(Open Database Connectivity,開放數(shù)據(jù)庫互連),,建立了一組規(guī)范,并提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)API(應(yīng)用程序編程接口)?;贠DBC的應(yīng)用程序?qū)?shù)據(jù)庫的操作不依賴任何DBMS,由對應(yīng)的DBMS的ODBC驅(qū)動程序完成
69、。能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫。,ODBC,,Microsoft推出的一致數(shù)據(jù)訪問技術(shù),為關(guān)系型或非關(guān)系型數(shù)據(jù)訪問提供了一致的訪問接口。ADO提供了高層軟件接口,不僅可在高級語言開發(fā)環(huán)境中使用,還可以在一些腳本語言中使用,這對于WEB程序訪問數(shù)據(jù)庫提供了捷徑。OLE DB 提供了底層軟件接口,ADO和OLE DB,JDBC,Java 數(shù)據(jù)庫連接JDBC (Java Database Connectivity)由一組用 Java 編程語
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第1章軟件開發(fā)方法(三)軟件開發(fā)技術(shù)
- 軟件開發(fā)技術(shù)手冊
- 面向?qū)ο蟮能浖_發(fā)基礎(chǔ)
- 軟件開發(fā)環(huán)境與開發(fā)技術(shù).pdf
- 軟件開發(fā)崗位舉證模板_軟件開發(fā)
- 軟件開發(fā)崗位舉證模板_資深軟件開發(fā)
- 軟件開發(fā)崗位舉證模板_助理軟件開發(fā)
- 軟件開發(fā)崗位舉證模板_高級軟件開發(fā)
- 軟件開發(fā)
- 軟件開發(fā)技術(shù)復(fù)習(xí)題
- 軟件開發(fā)技術(shù)文檔編寫規(guī)范==
- 軟件開發(fā)技術(shù) 復(fù)習(xí)題
- 絡(luò)軟件開發(fā)技術(shù)概念篇
- 軟件開發(fā)技術(shù)復(fù)習(xí)題
- 廣告屏蔽軟件開發(fā)技術(shù)方案
- 軟件開發(fā)技術(shù)復(fù)習(xí)題
- 軟件開發(fā)模型
- 軟件開發(fā)合同
- 軟件開發(fā)合同
- 軟件開發(fā)規(guī)范
評論
0/150
提交評論