iOS程序員面試分類模擬15_第1頁
iOS程序員面試分類模擬15_第2頁
iOS程序員面試分類模擬15_第3頁
iOS程序員面試分類模擬15_第4頁
iOS程序員面試分類模擬15_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

iOS程序員面試分類模擬15簡答題1.

說出你所知道的3種以上開源數(shù)據(jù)庫的名稱?正確答案:MySQL、PostgreSQL、Ingresr3、MaxDB、InterBase(即Firebird(江南博哥))等。

針對以上5個主流開源數(shù)據(jù)庫進行簡要的介紹(見表)。主流開源數(shù)據(jù)庫的概要介紹數(shù)據(jù)庫概要介紹主要優(yōu)點MySQLMySQL是一個多線程、結(jié)構(gòu)化查詢語言(SQL)數(shù)據(jù)庫服務(wù)器。MySQL的執(zhí)行性能高,運行速度快,容易使用①可靠的性能和服務(wù)②易于使用和部署,MySQL的結(jié)構(gòu)體系易于定制,運行速度快,其獨特的多存儲引擎結(jié)構(gòu)為企業(yè)客戶提供了靈活性③跨平臺多,MySQL可用于20多種不同平臺PostgreSQL一個功能齊全、開放源代碼的對象一關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)①PostgreSQL包括了豐富的數(shù)據(jù)類型支持,例如IP類型和幾何類型等②PostgreSQL是全功能的開源軟件數(shù)據(jù)庫,全面支持事務(wù)、子查詢、多版本并行控制系統(tǒng)和數(shù)據(jù)完整性檢查等特性③PostgreSQL支持幾乎所有類型的數(shù)據(jù)庫客戶端接口④支持多平臺使用Ingresr3Ingresr3按照CATrustedOpenSourceicense(CA可信開放源代碼許可)授權(quán),取得此授權(quán)的人可以查看Ingresr3數(shù)據(jù)庫的源代碼,并免費下載該軟件①具備高可用性、可擴展性和可靠性等②是第一個以ZopeRDBMSPersistence引擎為基礎(chǔ)的初始數(shù)據(jù)庫(InitialDatabase),其表分區(qū)和索引功能滿足超大型數(shù)據(jù)庫部署的需求③可以在異構(gòu)環(huán)境中與其他應(yīng)用程序和數(shù)據(jù)進行無縫集成MaxDBMaxDB是一個適應(yīng)繁重任務(wù)、經(jīng)過SAP認證的開源OLTP數(shù)據(jù)庫,OLTP的使用為其提供了可靠性、可用性、擴展性和高性能①降低企業(yè)SAP運行的費用成本②配置簡單,管理維護成本低廉③完善的備份和恢復(fù)功能④數(shù)據(jù)庫容量可達TB級⑤提供集群和熱備份支持,帶來高可用性InterBaseInterBase是一個易于開發(fā)者使用的數(shù)據(jù)庫,可以支持復(fù)雜商業(yè)應(yīng)用的快速開發(fā)與部署①占用很少的空間意味著數(shù)據(jù)庫消耗的系統(tǒng)資源很少,能夠運行在一個并不昂貴的系統(tǒng)之上②自動崩潰恢復(fù)功能、自動崩潰恢復(fù)機制的調(diào)優(yōu)功能使得系統(tǒng)維護量很小,并且沒有日志文件蔓延(LogFileCreep)現(xiàn)象③在線備份功能進一步降低系統(tǒng)維護量,并提升生產(chǎn)率,因為在備份數(shù)據(jù)時并不需要停止數(shù)據(jù)庫

2.

SQL語言的功能有哪些?正確答案:SQL是結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)的縮寫,其功能包括數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制4個部分。

數(shù)據(jù)查詢是數(shù)據(jù)庫中最常見的操作,通過select語句可以得到所需的信息。SQL語言的數(shù)據(jù)操縱語句(DataManipulationLanguage,DML)主要包括插入數(shù)據(jù)、修改數(shù)據(jù)及刪除數(shù)據(jù)3種語句。SQL語言使用數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)實現(xiàn)數(shù)據(jù)定義功能,可對數(shù)據(jù)庫用戶、基本表、視圖、索引進行定義與撤銷。數(shù)據(jù)控制語句(DataControlLanguage,DCL)用于對數(shù)據(jù)庫進行統(tǒng)一的控制管理,保證數(shù)據(jù)在多用戶共享的情況下能夠安全。

基本的SQL語句有select、insert、update、delete、create、drop、grant、revoke等。其具體使用方式見表?;镜腟QL語句的使用方式類型關(guān)鍵字描述語法格式數(shù)據(jù)查詢select選擇符合條件的記錄select*fromtablewhere條件語句數(shù)據(jù)操縱insert插入一條記錄insertintotable(字段1,字段2...)values(值1,值2...)update更新語句updatetableset字段名=字段值where條件表達式delete刪除記錄Deletefromtablewhere條件表達式數(shù)據(jù)定義create數(shù)據(jù)表的建立createtabletablename(字段1,字段2...)drop數(shù)據(jù)表的刪除droptabletablename數(shù)據(jù)控制grant為用戶授予系統(tǒng)權(quán)限grant<系統(tǒng)權(quán)限>|<角色>[,<系統(tǒng)權(quán)限>|<角色>]...to<用戶名>|<角色>|public[,<用戶名>|<角色>]...[withadminoption]revoke收回系統(tǒng)權(quán)限r(nóng)evoke<系統(tǒng)權(quán)限>|<角色>[,<系統(tǒng)權(quán)限>|<角色>]...from<用戶名>|<角色>|public[,<用戶名>|<角色>]...

例如,設(shè)教務(wù)管理系統(tǒng)中有3個基本表:

學(xué)生信息表S(SNO,SNAME,AGE,SEX),其屬性分別表示學(xué)號、學(xué)生姓名、年齡和性別。

選課信息表SC(SNO,CNO,SCGRADE),其屬性分別表示學(xué)號、課程號和成績。

課程信息表C(CNO,CNAME,CTEACHER),其屬性分別表示課程號、課程名稱和任課老師姓名。

1)把SC表中每門課程的平均成績插入到另外一個已經(jīng)存在的表SC_C(CNO,CNAME,AVG_GRADE)中,其中AVG_GRADE表示的是每門課程的平均成績。

INSERTINTOSC_C(CNO,CNAME,AVG_GRADE)

SELECTSC.CNO,C.CNAME,AVG(SCGRADE)FROMSC,CWHERESC.CNO=C.CNOGROUPBYSC.CNO,C.CNAMESC

2)從SC表中把何吳老師的女學(xué)生選課記錄刪除。

DELETEFROMSCWHERECNO=(SELECTCNOFROMCWHEREC.CTEACHER='何昊')ANDSNOIN(SELECTSNOFROMSWIlERESEX='女')

3)找出沒有選修過何吳老師講授課程的所有學(xué)生姓名。

SELECTSNAMEFROMS

wHERENOTEXISTS(

SELECT*FROMSC,CWHERESC.CNO=C.cNOANDCTEACHER='何昊'ANDSC.SNO=S.SNO)

4)列出有兩門以上(含兩門)不及格課程(成績小于60)的學(xué)生姓名及其平均成績。

SELECTS.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)

FROMS,SC,(

SELECTSNOFROMSCWHERESCGRADE<60GROUPBYSN0

HAVINGCOUNT(DISTINCTCNO)>=2)AWHERES.SNO=A.SNOANDSC.SNO=A.SNO

GROUPBYS.SNO.S.SNAME

5)列出既學(xué)過“1”號課程,又學(xué)過“2”號課程的所有學(xué)生姓名。

SELECTS.SNO,S.SNAME

FROMS,(SELECTSC.SNOFROMSC,C

WHERESC.CNO=C.CNOANDC.CNAMEIN('1','2')

GROUPBYSNO

HAVINGCOUNTfDISTINCTCNO)=2

)SCWHERES.SNO=SC.SNO

6)列出“1”號課成績比“2”號同學(xué)該門課成績高的所有學(xué)生的學(xué)號。

SELECTS.SNO,S.SNAME

FROMS,(

SELECTSC1.SNO

FROMSCSC1,CC1,SCSC2,CC2

WHERESC1.CNO=C1.CNOANDC1.CNAME='1'

ANDSC2.CNO=C2.CNOANDC2.CNAME='2'

ANDSC1.SNO=SC2.SNO

ANDSC1.SCGRADE>SC2.SCGRADE

)SCWHERES.SNO=SC.SNO

7)列出“1”號課成績比“2”號課成績高的所有學(xué)生的學(xué)號及其“1”號課和“2”號課的成績。

SELECTS.SNO,S.SNAME,SC.gradel,SC.grade2

FROMS,(

SELECTSC1.SNO,grade1=SC1.SCGRADE,grade2=SC2.SCGRADE

FROMSCSC1,CC1,SCSC2,CC2

WHERESC1.CNO=C1.CNOANDC1.CNO=1

ANDSC2.CNO=C2.CNOANDC2.CNO=2

ANDSC1.SNO=SC2.SNO

ANDSC1.SCGRADE>SC2.SCGRADE

)SCWHERES.SNO=SC.SNO

3.

delete與truncate命令有哪些區(qū)別?正確答案:相同點:都可以用來刪除一個表中的數(shù)據(jù)。

不同點:

1)truncate是一個數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL),它會被隱式地提交,一旦執(zhí)行后將不能回滾。delete執(zhí)行的過程是每次從表中刪除一行數(shù)據(jù),同時將刪除的操作以日志的形式進行保存,以便將來進行回滾操作。

2)用delete操作后,被刪除的數(shù)據(jù)占用的存儲空間還在,還可以恢復(fù)。而用truncate操作刪除數(shù)據(jù),被刪除的數(shù)據(jù)會立即釋放所占有的存儲空間,被刪除的數(shù)據(jù)是不能被恢復(fù)的。

3)truncate的執(zhí)行速度比delete快。

4.

Oracle數(shù)據(jù)庫的一個表中有若干條數(shù)據(jù),其占用的空間為10M,如果用delete語句刪除表中所有的數(shù)據(jù),那么此時這個表所占的空間為多大?正確答案:10M。數(shù)據(jù)庫中delete操作類似于在Windows系統(tǒng)中把數(shù)據(jù)放到回收站,還可以恢復(fù)。因此,它不會立即釋放所占的存儲空間。如果想在刪除數(shù)據(jù)后立即釋放存儲空間,那么可以使用truncate命令。

5.

內(nèi)連接與外連接有什么區(qū)別?正確答案:內(nèi)連接,也稱為自然連接,只有兩個表相匹配的行才能在結(jié)果集中出現(xiàn)。返回的結(jié)果集是兩個表中所有相匹配的數(shù)據(jù),而舍棄不匹配的數(shù)據(jù)。由于內(nèi)連接是從結(jié)果表中刪除與其他連接表中沒有匹配行的所有行,所以內(nèi)連接可能會造成信息的丟失。內(nèi)連接的語法如下:

selectfieidlistfromtablel[inner]jointable2ontable1.column=table.column

內(nèi)連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。與內(nèi)連接不同,外連接不僅包含符合連接條件的行,還包括左表(左外連接時)、右表(右外連接時)或兩個邊接表(全外連接)中的所有數(shù)據(jù)行。也就是說,只限制其中一個表的行,而不限制另一個表的行。SQL的外連接共有3種類型:左外連接(關(guān)鍵字為LEFTOUTERJOIN)、右外連接(關(guān)鍵字為RIGHTOUTERJOIN)和全外連接(關(guān)鍵字為FULLOUTERJOIN)。外連接的用法和內(nèi)連接一樣,只是將INNERJOIN關(guān)鍵字替換為相應(yīng)的外連接關(guān)鍵字。

內(nèi)連接只顯示符合連接條件的記錄,外連接除了顯示符合連接條件的記錄外,還顯示不符合連接條件的記錄。例如,若用左外連接,還顯示左表中記錄。

例如,有兩個學(xué)生表A(見表1)和課程表B(見表2)。表1學(xué)生表A學(xué)號姓名0001張三0002李四0003王五表2課程表B學(xué)號課程名0001數(shù)學(xué)0002英語0003數(shù)學(xué)0004計算機對表1和表2進行內(nèi)連接后的結(jié)果見表3。表3內(nèi)連接結(jié)果學(xué)號姓名課程名0001張三數(shù)學(xué)0002李四英語0003王五數(shù)學(xué)對表1和表2進行右外連接后結(jié)果見表4。表4右外連接結(jié)果學(xué)號姓名課程名0001張三數(shù)學(xué)0002李四英語0003王五數(shù)學(xué)0004

計算機

6.

什么是事務(wù)?正確答案:事務(wù)是數(shù)據(jù)庫中一個單獨的執(zhí)行單元(unit),它通常由高級數(shù)據(jù)庫操作語言(例如SQL)或編程語言(例如C++、Java等)書寫的用戶程序的執(zhí)行所引起。當(dāng)在數(shù)據(jù)庫中更改數(shù)據(jù)成功時,在事務(wù)中更改的數(shù)據(jù)便會提交,不再改變。否則,事務(wù)就取消或者回滾,更改無效。

例如網(wǎng)上購物,其交易過程至少包括以下幾個步驟的操作:

1)更新客戶所購商品的庫存信息。

2)保存客戶付款信息。

3)生成訂單并且保存到數(shù)據(jù)庫中。

4)更新用戶相關(guān)信息,例如購物數(shù)量等。

在正常的情況下,這些操作都將順利進行,最終交易成功,與交易相關(guān)的所有數(shù)據(jù)庫信息也成功地更新。但是,如果遇到突然掉電或是其他意外情況,導(dǎo)致這一系列過程中任何一個環(huán)節(jié)出了差錯,例如在更新商品庫存信息時發(fā)生異常、顧客銀行賬戶余額不足等,都將導(dǎo)致整個交易過程失敗。而一旦交易失敗,數(shù)據(jù)庫中所有信息都必須保持交易前的狀態(tài)不變,例如最后一步更新用戶信息時失敗而導(dǎo)致交易失敗,那么必須保證這筆失敗的交易不影響數(shù)據(jù)庫的狀態(tài),即原有的庫存信息沒有被更新,用戶也沒有付款,訂單也沒有生成。否則,數(shù)據(jù)庫的信息將會不一致,或者出現(xiàn)更為嚴重的不可預(yù)測的后果。數(shù)據(jù)庫事務(wù)正是用來保證這種情況下交易的平穩(wěn)性和可預(yù)測性的技術(shù)。

事務(wù)必須滿足4個屬性,即原子性(atomicity)、一致性(consistency)、隔離性(isolation)、持久性(durability),即ACID4種屬性。

(1)原子性

事務(wù)是一個不可分割的整體,為了保證事務(wù)的總體目標,事務(wù)必須具有原子性,即當(dāng)數(shù)據(jù)修改時,要么全執(zhí)行,要么全都不執(zhí)行,即不允許事務(wù)部分地完成,避免了只執(zhí)行這些操作的一部分而帶來的錯誤。原子性要求事務(wù)必須被完整執(zhí)行。

(2)一致性

一個事務(wù)執(zhí)行之前和執(zhí)行之后數(shù)據(jù)庫數(shù)據(jù)必須保持一致性狀態(tài)。數(shù)據(jù)庫的一致性狀態(tài)應(yīng)該滿足模式鎖指定的約束,那么在完整執(zhí)行該事務(wù)后數(shù)據(jù)庫仍然處于一致性狀態(tài)。為了維護所有數(shù)據(jù)的完整性,在關(guān)系型數(shù)據(jù)庫中,所有的規(guī)則必須應(yīng)用到事務(wù)的修改上。數(shù)據(jù)庫的一致性狀態(tài)由用戶來負責(zé),由并發(fā)控制機制實現(xiàn),例如銀行轉(zhuǎn)賬,轉(zhuǎn)賬前后兩個賬戶金額之和應(yīng)保持不變,由于并發(fā)操作帶來的數(shù)據(jù)不一致性包括:丟失數(shù)據(jù)修改、讀“臟”數(shù)據(jù)、不可重復(fù)讀和產(chǎn)生幽靈數(shù)據(jù)。

(3)隔離性

也被稱為獨立性,當(dāng)兩個或多個事務(wù)并發(fā)執(zhí)行時,為了保證數(shù)據(jù)的安全性,將一個事物內(nèi)部的操作與事務(wù)的操作隔離起來,不被其他的正在進行的事務(wù)看到。例如對任何一對事務(wù)T1和T2,對T1而言,T2要么在T1開始之前已經(jīng)結(jié)束,要么在T1完成之后再開始執(zhí)行。數(shù)據(jù)庫有4種類型的事務(wù)隔離級別:不提交的讀、提交的讀、可重復(fù)的讀和串行化。因為隔離性使得每個事務(wù)的更新在它被提交之前,對其他事務(wù)都是不可見的,所以實施隔離性是解決臨時更新與消除級聯(lián)回滾問題的一種方式。

(4)持久性

也被稱為永久性,事務(wù)完成以后,DBMS保證它對數(shù)據(jù)庫中的數(shù)據(jù)的修改是永久性的,當(dāng)系統(tǒng)或介質(zhì)發(fā)生故障時,該修改也永久保持。持久性一般通過數(shù)據(jù)庫備份與恢復(fù)來保證。

嚴格來說,數(shù)據(jù)庫事務(wù)屬性(ACID)都是由數(shù)據(jù)庫管理系統(tǒng)來進行保證的,在整個應(yīng)用程序運行過程中應(yīng)用無須去考慮數(shù)據(jù)庫的ACID實現(xiàn)。

一般情況下,通過執(zhí)行commit或rollback語句來終止事務(wù),當(dāng)執(zhí)行commit語句時,自從事務(wù)啟動以來對數(shù)據(jù)庫所做的一切更改就成為永久性的了,即被寫入到磁盤,而當(dāng)執(zhí)行rollback語句時,自動事務(wù)啟動以來對數(shù)據(jù)庫所做的一切更改都會被撤銷,并且數(shù)據(jù)庫中內(nèi)容返回到事務(wù)開始之前所處的狀態(tài)。無論什么情況,在事務(wù)完成時,都能保證回到一致狀態(tài)。

7.

請談?wù)剶?shù)據(jù)庫中的事務(wù)。正確答案:事務(wù)是作為一個單元的一組有序的數(shù)據(jù)庫操作。如果組中的所有操作都成功,則認為事務(wù)成功,即使只有一個操作失敗,事務(wù)也不成功。如果所有操作完成,事務(wù)則提交,那么其修改將作用于所有其他數(shù)據(jù)庫進程。如果一個操作失敗,則事務(wù)將回滾,該事務(wù)所有操作的影響都將取消。

8.

什么是存儲過程?它與函數(shù)有什么區(qū)別與聯(lián)系?正確答案:SQL語句執(zhí)行的時候要先編譯,然后被執(zhí)行。在大型數(shù)據(jù)庫系統(tǒng)中,為了提高效率,將為了完成特定功能的SQL語句集進行編譯優(yōu)化后,存儲在數(shù)據(jù)庫服務(wù)器中,用戶通過指定存儲過程的名字來調(diào)用執(zhí)行。

例如,如下為一個創(chuàng)建存儲過程的常用語法。

createproceduresp_name@[參數(shù)名][類型]

as

begin

......

End

調(diào)用存儲過程語法:execsp_name[參數(shù)名]

刪除存儲過程語法:dropproceduresp_name

使用存儲過程可以增強SQL語言的功能和靈活性,由于可以用流程控制語句編寫存儲過程,有很強的靈活性,所以可以完成復(fù)雜的判斷和運算,并且可以保證數(shù)據(jù)的安全性和完整性,同時存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,也保證了數(shù)據(jù)的安全。

需要注意的是,存儲過程不等于函數(shù),二者雖然本質(zhì)上沒有區(qū)別,但具體而言,還是有如下幾個方面的區(qū)別:

1)存儲過程一般是作為一個獨立的部分來執(zhí)行的,而函數(shù)可以作為查詢語句的一個部分來調(diào)用。由于函數(shù)可以返回一個對象,所以它可以在查詢語句中位于FROM關(guān)鍵字的后面。

2)一般而言,存儲過程實現(xiàn)的功能較復(fù)雜,而函數(shù)實現(xiàn)的功能針對性比較強。

3)函數(shù)需要用括號包住輸入的參數(shù),且只能返回一個值或表對象,存儲過程可以返回多個參數(shù)。

4)函數(shù)可以嵌入在SQL中使用,可以在SELECT中調(diào)用,存儲過程不行。

5)函數(shù)不能直接操作實體表,只能操作內(nèi)建表。

6)存儲過程在創(chuàng)建時即在服務(wù)器上進行了編譯,執(zhí)行速度更快。

9.

一二三四范式有什么區(qū)別?正確答案:在設(shè)計與操作維護數(shù)據(jù)庫時,最關(guān)鍵的問題就是要確保數(shù)據(jù)正確地分布到數(shù)據(jù)庫的表中。使用正確的數(shù)據(jù)結(jié)構(gòu),不僅有助于對數(shù)據(jù)庫進行相應(yīng)的存取操作,還可以極大地簡化應(yīng)用程序的其他內(nèi)容(查詢、窗體、報表、代碼等),正確地進行表的設(shè)計成為“數(shù)據(jù)庫規(guī)范化”,它的目的就是減少數(shù)據(jù)庫中的數(shù)據(jù)冗余,從而增加數(shù)據(jù)的一致性。

規(guī)范化是在識別數(shù)據(jù)庫中的數(shù)據(jù)元素、關(guān)系,以及定義所需的表和各表中的項目這些初始工作之后的一個細化的過程。常見的范式有1NF、2NF、3NF、BCNF及4NF。

1NF,第一范式。它指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復(fù)的屬性。如果出現(xiàn)重復(fù)的屬性,那么就可能需要定義一個新的實體,新的實體由重復(fù)的屬性構(gòu)成,新實體與原實體之間為一對多關(guān)系。第一范式的模式要求屬性值不可再分裂成更小部分,即屬性項不能是屬性組合或由組屬性組成。簡而言之,第一范式就是無重復(fù)的列。例如,由“職工號”“姓名”“電話號碼”組成的表(一個人可能有一個辦公電話和一個移動電話),這時將其規(guī)范化為1NF可以將電話號碼分為“辦公電話”和“移動電話”兩個屬性,即職工(職工號、姓名、辦公電話、移動電話)。

2NF,第二范式。第二范式是在第一范式的基礎(chǔ)上建立起來的,即滿足第二范式必須先滿足第一范式。第二范式要求數(shù)據(jù)庫表中的每個實例或行必須可以被唯一地區(qū)分。為實現(xiàn)區(qū)分通常需要為表加上一個列,以存儲各個實例的唯一標識。如果關(guān)系模式(R)為第一范式,并且R中每一個非主屬性完全函數(shù)依賴于R的某個候選鍵,則稱R為第二范式模式。(如果A是R的候選鍵的一個屬性,則稱A是R的主屬性,否則稱A是R的非主屬性。)例如,在選課關(guān)系表(學(xué)號、課程號、成績、學(xué)分),關(guān)鍵字為組合關(guān)鍵字(學(xué)號、課程號),由于非主屬性學(xué)分僅依賴于課程號,對關(guān)鍵字(學(xué)號、課程號)只是部分依賴,而不是完全依賴,所以此種方式導(dǎo)致數(shù)據(jù)冗余及更新異常等問題,解決辦法是將其分為兩個關(guān)系模式:學(xué)生表(學(xué)號、課程號、分數(shù))和課程表(課程號、學(xué)分),新關(guān)系通過學(xué)生表中的外關(guān)鍵字課程號聯(lián)系,在需要時進行連接。

3NF,第三范式。如果R是第二范式,且每個非主屬性都不傳遞依賴于R的候選鍵,則稱R是第三范式的模式。例如學(xué)生表(學(xué)號、姓名、課程號、成績),其中學(xué)生姓名無重名,所以該表有兩個候選鍵(學(xué)號、課程號)和(姓名、課程號),則存在函數(shù)依賴:學(xué)號→姓名,(學(xué)號、課程號)→成績,(姓名、課程號)→成績,唯一的非主屬性成績對候選鍵不存在部分依賴,也不存在傳遞依賴,所以屬于第三范式。

BCNF。它構(gòu)建在第三范式的基礎(chǔ)上,如果R是第一范式,且每個屬性都不傳遞依賴于R的候選鍵,那么稱R為BCNF的模式。假設(shè)倉庫管理關(guān)系表(倉庫號、存儲物品號、管理員號、數(shù)量),滿足一個管理員只在一個倉庫工作;一個倉庫可以存儲多種物品。則存在如下關(guān)系:

(倉庫號、存儲物品號)→(管理員號、數(shù)量)

(管理員號、存儲物品號)→(倉庫號、數(shù)量)

所以,(倉庫號、存儲物品號)和(管理員號、存儲物品號)都是倉庫管理關(guān)系表的候選鍵,表中的唯一非關(guān)鍵字段為數(shù)量,它是符合第三范式的。但是,由于存在如下決定關(guān)系:

(倉庫號)→(管理員號)

(管理員號)→(倉庫號)

即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以其不符合BCNF范式。把倉庫管理關(guān)系表分解為兩個關(guān)系表:倉庫管理表(倉庫號、管理員號)和倉庫表(倉庫號、存儲物品號、數(shù)量),這樣的數(shù)據(jù)庫表是符合BCNF范式的,消除了刪除異常、插入異常和更新異常。

4NF,第四范式。設(shè)R是一個關(guān)系模式,D是R上的多值依賴集合。如果D中成立非平凡多值依賴X→Y時,X必是R的超鍵,那么稱R是第四范式的模式。例如,職工表(職工編號、職工孩子姓名、職工選修課程),在這個表中同一個職工也可能會有多個職工孩子姓名,同樣,同一個職工也可能會有多個職工選修課程,即這里存在著多值事實,不符合第四范式。如果要符合第四范式,那么只需要將上表分為兩個表,使它們只有一個多值事實,例如職工表一(職工編號、職工孩子姓名),職工表二(職工編號、職工選修課程),兩個表都只有一個多值事實,所以符合第四范式。

下圖為各范式關(guān)系圖。

各范式關(guān)系圖

10.

什么是觸發(fā)器?正確答案:觸發(fā)器是一種特殊類型的存儲過程,它由事件觸發(fā),而不是程序調(diào)用或手工啟動,當(dāng)數(shù)據(jù)庫有特殊的操作時,對這些操作由數(shù)據(jù)庫中的事件來觸發(fā),自動完成這些SQL語句。使用觸發(fā)器可以用來保證數(shù)據(jù)的有效性和完整性,完成比約束更復(fù)雜的數(shù)據(jù)約束。

具體而言,觸發(fā)器與存儲過程的區(qū)別見表。觸發(fā)器與存儲過程區(qū)別觸發(fā)器存儲過程當(dāng)某類數(shù)據(jù)操縱DML語句發(fā)生時隱式地調(diào)用從一個應(yīng)用或過程中顯式地調(diào)用在觸發(fā)器體內(nèi)禁止使用commit、rollback語句在過程體內(nèi)可以使用所有PL/SQL塊中都能使用的SQL語句,包括commit、rollback語句不能接收參數(shù)輸入可以接收參數(shù)輸入

根據(jù)SQL語句的不同,觸發(fā)器可分為兩類:DML觸發(fā)器和DLL觸發(fā)器。

DML觸發(fā)器是當(dāng)數(shù)據(jù)庫服務(wù)器發(fā)生數(shù)據(jù)操作語言事件時執(zhí)行的存儲過程,有Affer和InsteadOf兩種觸發(fā)器。After觸發(fā)器被激活觸發(fā)是在記錄改變之后進行的一種觸發(fā)器。InsteadOf觸發(fā)器是在記錄變更之前,去執(zhí)行觸發(fā)器本身所定義的操作,而不是執(zhí)行原來SQL語句里的操作。DLL觸發(fā)器是在響應(yīng)數(shù)據(jù)定義語言事件時執(zhí)行的存儲過程。

具體而言,觸發(fā)器的主要作用表現(xiàn)為如下幾個方面的內(nèi)容:

1)增加安全性。

2)利用觸發(fā)器記錄所進行的修改及相關(guān)信息,跟蹤用戶對數(shù)據(jù)庫的操作,實現(xiàn)審計。

3)維護那些通過創(chuàng)建表時的聲明約束不可能實現(xiàn)的復(fù)雜的完整性約束,以及對數(shù)據(jù)庫中特定事件進行監(jiān)控與響應(yīng)。

4)實現(xiàn)復(fù)雜的非標準的數(shù)據(jù)庫相關(guān)完整性規(guī)則、同步實時地復(fù)制表中的數(shù)據(jù)。

5)觸發(fā)器是自動的,它們在對表的數(shù)據(jù)做了任何修改之后就會被激活,例如可以自動計算數(shù)據(jù)值,如果數(shù)據(jù)的值達到了一定的要求,則進行特定的處理。以某企業(yè)財務(wù)管理為例,如果企業(yè)的資金鏈出現(xiàn)短缺,并且達到某種程度,則發(fā)送警告信息。

下面是一個觸發(fā)器的例子,該觸發(fā)器的功能是在每周末進行數(shù)據(jù)表更新,如果當(dāng)前用戶沒有訪問WEEKEND_UPDATE_OK表的權(quán)限,那么需要重新賦予權(quán)限。代碼如下:

CREATEORREPLACETRIG(iERupdate_on_weekends_check

BEFOREUPDATEOFsalONEMP

FOREACHROW

DECLARE

my_countnumber(4);

BEGIN

SELECTCOUNT(u_name)

FROMWEEKEND_UPDATE_OKINTOmy_count

WHEREu_name=user_name;

IFmy_count=0THEN

RAISE_APPLICATION_ERROR(20508,'Updatenotallowed');

ENDIF;

END;

11.

觸發(fā)器分為事前觸發(fā)和事后觸發(fā),二者有什么區(qū)別?語句級觸發(fā)和行級觸發(fā)有什么區(qū)別?正確答案:事前觸發(fā)發(fā)生在事件發(fā)生之前驗證一些條件或進行一些準備工作;事后觸發(fā)發(fā)生在事件發(fā)生之后,做收尾工作,保證事務(wù)的完整性。事前觸發(fā)可以獲得之前和新的字段值。語句級觸發(fā)器可以在語句執(zhí)行之前或之后執(zhí)行,而行級觸發(fā)在觸發(fā)器所影響的每一行觸發(fā)一次。

12.

什么是游標?正確答案:在數(shù)據(jù)庫中,游標提供了一種對從表中檢索出的數(shù)據(jù)進行操作的靈活手段,它實際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機制。

游標總是與一條SQL選擇語句相關(guān)聯(lián),因為游標由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語句檢索出的多條記錄)和結(jié)果集中指向特定記錄的游標位置組成。當(dāng)決定對結(jié)果集進行處理時,必須聲明一個指向該結(jié)果集的游標。

游標允許應(yīng)用程序?qū)Σ樵冋Z句SELECT返回的行結(jié)果集中每一行進行相同或不同的操作,而不是一次對整個結(jié)果集進行同一種操作:它還提供對基于游標位置而對表中數(shù)據(jù)進行刪除或更新的能力;而且,正是游標把作為面向集合的數(shù)據(jù)庫管理系統(tǒng)和面向行的程序設(shè)計兩者聯(lián)系起來,使兩個數(shù)據(jù)處理方式能夠進行溝通。

例如,聲明一個游標student_cursor,用于訪問數(shù)據(jù)庫SCHOOL中的“學(xué)生基本信息表”,代碼如下:

LISESCHOOL

GO

DECLAREstudent_cursorCURSOR

FROMSELECT*FROM學(xué)生基本信息表

上述代碼中,聲明游標時,在SELECT語句中未使用WHERE子句,故此游標返回的結(jié)果集是由“學(xué)生基本信息表”中的所有記錄構(gòu)成的。

在SELECT返回的行集合中,游標不允許程序?qū)φ麄€行集合執(zhí)行相同的操作,但對每一行數(shù)據(jù)的操作不作要求。游標的優(yōu)點有以下兩個方面的內(nèi)容:

1)在使用游標的表中,對行提供刪除和更新的能力。

2)游標將面向集合的數(shù)據(jù)庫管理系統(tǒng)和面向行的程序設(shè)計連接起來。

13.

如果數(shù)據(jù)庫日志滿了,那么會出現(xiàn)什么情況?正確答案:日志文件(LogFile)記錄所有對數(shù)據(jù)庫數(shù)據(jù)的修改,主要是保護數(shù)據(jù)庫以防止故障,以及恢復(fù)數(shù)據(jù)時使用。其特點如下:

1)每一個數(shù)據(jù)庫至少包含兩個日志文件組。每個日志文件組至少包含兩個日志文件成員。

2)日志文件組以循環(huán)方式進行寫操作。

3)每一個日志文件成員對應(yīng)一個物理文件。

通過日志文件來記錄數(shù)據(jù)庫事務(wù)可以最大限度地保證數(shù)據(jù)的一致性與安全性,但數(shù)據(jù)庫中日志滿了,就只能執(zhí)行查詢等讀操作,不能執(zhí)行更改、備份等操作,原因是任何寫操作都要記錄日志,也就是說基本上處于不能使用的狀態(tài)。

14.

union和unionall有什么區(qū)別?正確答案:union在進行表求并集后會去掉重復(fù)的元素,所以會對所產(chǎn)生的結(jié)果集進行排序運算,刪除重復(fù)的記錄再返回結(jié)果。

而unionall只是簡單地將兩個結(jié)果合并后就返回。因此,如果返回的兩個結(jié)果集中有重復(fù)的數(shù)據(jù),那么返回的結(jié)果集就會包含重復(fù)的數(shù)據(jù)了。

從上面的對比可以看出,在執(zhí)行查詢操作的時候,unionall要比union快很多。所以,如果可以確認合并的兩個結(jié)果集中不包含重復(fù)的數(shù)據(jù),那么最好使用unionall。例如,有兩個學(xué)生表table1和table2。Table1C1C2112233Table2C1C2334411select*fromTable1unionselect*fromTable2的查詢結(jié)果為:C1C211223344select*fromTablelunionallselect*fromTable2的查詢結(jié)果為:C1C2112233334411

15.

什么是視圖?正確答案:視圖是由從數(shù)據(jù)庫的基本表中選取出來的數(shù)據(jù)組成的邏輯窗口。它不同于基本表,是一個虛表,在數(shù)據(jù)庫中,存放的只是視圖的定義而已,而不存放視圖包含的數(shù)據(jù)項,這些項目仍然存放在原來的基本表結(jié)構(gòu)中。

視圖的作用非常多,主要有以下幾點:首先,可以簡化數(shù)據(jù)查詢語句;其次,可以使用戶能從多角度看待同一數(shù)據(jù);然后,通過引入視圖,可以提高數(shù)據(jù)的安全性;最后,視圖提供了一定程度的邏輯獨立性等。

通過引入視圖機制,用戶可以將注意力集中在其關(guān)心的數(shù)據(jù)上而非全部數(shù)據(jù),這樣就大大提高了用戶效率與用戶滿意度,而且如果這些數(shù)據(jù)來源于多個基本表結(jié)構(gòu),或者數(shù)據(jù)不僅來自于基本表結(jié)構(gòu),還有一部分數(shù)據(jù)來源于其他視圖,并且搜索條件又比較復(fù)雜,那么需要編寫的查詢語句就會比較煩瑣,此時定義視圖就可以使數(shù)據(jù)的查詢語句變得簡單可行。定義視圖可以將表與表之間的復(fù)雜的操作連接和搜索條件對用戶不可見,用戶只需要簡單地對一個視圖進行查詢即可,所以增加了數(shù)據(jù)的安全性,但是不能提高查詢的效率。

16.

什么是數(shù)據(jù)庫三級封鎖協(xié)議?正確答案:眾所周知,基本的封鎖類型有兩種:排它鎖(X鎖)和共享鎖(S鎖)。所謂X鎖是事務(wù)T對數(shù)據(jù)A加上X鎖時,只允許事務(wù)T讀取和修改數(shù)據(jù)A。所謂S鎖是事務(wù)T對數(shù)據(jù)A加上S鎖時,其他事務(wù)只能再對數(shù)據(jù)A加S鎖,而不能加X鎖,直到事務(wù)T釋放數(shù)據(jù)A上的S鎖。若事務(wù)T對數(shù)據(jù)A加了S鎖,則事務(wù)T就可以對數(shù)據(jù)A進行讀取,但不能進行更新(S鎖因此又稱為讀鎖),在事務(wù)T釋放數(shù)據(jù)A上的S鎖以前,其他事務(wù)可以再對數(shù)據(jù)A加S鎖,但不能加X鎖,從而可以讀取數(shù)據(jù)A,但不能更新數(shù)據(jù)A。

在運用X鎖和S鎖對數(shù)據(jù)對象加鎖時,還需要約定一些規(guī)則。例如,何時申請X鎖或S鎖、持鎖時間、何時釋放等,這些規(guī)則稱為封鎖協(xié)議(LockingProtocol)。對封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。一般使用三級封鎖協(xié)議,也稱為三級加鎖協(xié)議。該協(xié)議是為了保證正確的調(diào)度事務(wù)的并發(fā)操作。三級加鎖協(xié)議是事務(wù)在對數(shù)據(jù)庫對象加鎖、解鎖時必須遵守的一種規(guī)則。下面分別介紹這三級封鎖協(xié)議。

(1)一級封鎖協(xié)議

事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(commit)和非正常結(jié)束(rollback)。一級封鎖協(xié)議可以防止丟失修改,并保證事務(wù)T是可恢復(fù)的,使用一級封鎖協(xié)議可以解決丟失修改問題。在一級封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對其進行修改,是不需要加鎖的,它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。

(2)二級封鎖協(xié)議

一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后方可釋放S鎖。二級封鎖協(xié)議除防止了丟失修改,還可以進一步防止讀“臟”數(shù)據(jù)。但在二級封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。

(3)三級封鎖協(xié)議

一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。三級封鎖協(xié)議除防止了丟失修改和不讀“臟”數(shù)據(jù)外,還進一步防止了不可重復(fù)讀。

17.

索引的優(yōu)缺點有哪些?正確答案:創(chuàng)建索引

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論