數(shù)據(jù)庫系統(tǒng)原理與實踐陸鑫習(xí)題答案_第1頁
數(shù)據(jù)庫系統(tǒng)原理與實踐陸鑫習(xí)題答案_第2頁
數(shù)據(jù)庫系統(tǒng)原理與實踐陸鑫習(xí)題答案_第3頁
數(shù)據(jù)庫系統(tǒng)原理與實踐陸鑫習(xí)題答案_第4頁
數(shù)據(jù)庫系統(tǒng)原理與實踐陸鑫習(xí)題答案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章單選題CDDBC判斷題FFFFT填空題網(wǎng)狀數(shù)據(jù)模型用戶大數(shù)據(jù)商業(yè)智能系統(tǒng)設(shè)計簡答題1)什么是數(shù)據(jù)模型?關(guān)系數(shù)據(jù)庫的數(shù)據(jù)模型與NoSQL數(shù)據(jù)庫的數(shù)據(jù)模型有哪些區(qū)別?答:數(shù)據(jù)模型是一種描述事物對象的數(shù)據(jù)特征及其結(jié)構(gòu)形式化表示,通常由數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作、數(shù)據(jù)約束三個部分組成。關(guān)系數(shù)據(jù)庫采用關(guān)系數(shù)據(jù)模型實現(xiàn)數(shù)據(jù)組織與存儲,支持SQL語言操作訪問;NoSQL數(shù)據(jù)庫采用非結(jié)構(gòu)化數(shù)據(jù)模型(如列簇、鍵值對、文檔、圖等)實現(xiàn)數(shù)據(jù)組織與存儲,有各自不同的操作API。數(shù)據(jù)庫文件與普通數(shù)據(jù)文件有哪些區(qū)別?答:數(shù)據(jù)庫文件具有如下特點:數(shù)據(jù)一般不重復(fù)存放可支持多個應(yīng)用程序并發(fā)訪問數(shù)據(jù)結(jié)構(gòu)獨立于使用它的應(yīng)用程序?qū)?shù)據(jù)增、刪、改、查操作均由數(shù)據(jù)庫系統(tǒng)軟件進(jìn)行管理和控制普通數(shù)據(jù)文件一般不具有數(shù)據(jù)庫的特點,需要程序員編程對數(shù)據(jù)庫文件進(jìn)行操作訪問。3)一個數(shù)據(jù)庫內(nèi)部通常包含哪些對象?答:一個數(shù)據(jù)庫內(nèi)部通常包含表、視圖、索引、存儲過程、觸發(fā)器等對象。4)數(shù)據(jù)庫系統(tǒng)由哪些部件組成?答:數(shù)據(jù)庫系統(tǒng)又稱為數(shù)據(jù)庫應(yīng)用系統(tǒng),由用戶、應(yīng)用程序、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)四個部分組成。5)采用列表形式對比分析流行度排名前2位的國產(chǎn)數(shù)據(jù)庫DBMS技術(shù)特性,并談?wù)勛约簩鉀Q基礎(chǔ)系統(tǒng)軟件“卡脖子”問題認(rèn)識以及發(fā)展國產(chǎn)數(shù)據(jù)庫技術(shù)有何建議?答:流行度排名前2位的國產(chǎn)數(shù)據(jù)庫DBMS技術(shù)特性O(shè)ceanBaseTiDB分布式部署OceanBase公有云(OceanBaseCloud),是構(gòu)建在阿里云、AWS等全球主流公有云基礎(chǔ)設(shè)施上,基于完全自主研發(fā)的原生分布式數(shù)據(jù)庫,提供彈性擴展、高性能、主流兼容的數(shù)據(jù)庫云服務(wù)。為客戶在云上提供服務(wù)、彈性、監(jiān)控、診斷、開發(fā)、遷移、備份、恢復(fù)的端到端數(shù)據(jù)庫服務(wù)化解決方案。云原生的分布式數(shù)據(jù)庫專為云而設(shè)計的分布式數(shù)據(jù)庫,通過TiDBOperator可在公有云、私有云、混合云中實現(xiàn)部署工具化、自動化。數(shù)據(jù)庫管理可通過OceanBase開發(fā)者工具(OceanBaseDeveloperCenter,ODC)創(chuàng)建和管理數(shù)據(jù)庫中的表、視圖等10余種數(shù)據(jù)庫對象??蔀橹付ń巧峙鋵?yīng)資源及該資源的訪問權(quán)限,企業(yè)內(nèi)不同角色間的開發(fā)協(xié)作亦會變得簡單可控。金融級高可用數(shù)據(jù)采用多副本存儲,數(shù)據(jù)副本通過Multi-Raft協(xié)議同步事務(wù)日志,多數(shù)派寫入成功事務(wù)才能提交,確保數(shù)據(jù)強一致性且少數(shù)副本發(fā)生故障時不影響數(shù)據(jù)的可用性。數(shù)據(jù)庫復(fù)制支持多種關(guān)系型數(shù)據(jù)庫、消息隊列與OceanBase數(shù)據(jù)庫之間的數(shù)據(jù)復(fù)制,是集數(shù)據(jù)遷移、實時數(shù)據(jù)同步和增量數(shù)據(jù)訂閱于一體的數(shù)據(jù)傳輸服務(wù),OMS幫助用戶低風(fēng)險、低成本、高效率的實現(xiàn)OceanBase的數(shù)據(jù)流通,助力構(gòu)建安全,穩(wěn)定、高效的數(shù)據(jù)復(fù)制架構(gòu)。實時HTAP提供行存儲引擎TiKV、列存儲引擎TiFlash兩款存儲引擎,TiFlash通過Multi-RaftLearner協(xié)議實時從TiKV復(fù)制數(shù)據(jù),確保行存儲引擎TiKV和列存儲引擎TiFlash之間的數(shù)據(jù)強一致。TiKV、TiFlash可按需部署在不同的機器,解決HTAP資源隔離的問題。數(shù)據(jù)庫維護(hù)OceanBase運維管理工具(OceanBaseControlPlatform,OCP)提供對OceanBase集群的圖形化管理能力,包括數(shù)據(jù)庫組件及相關(guān)資源的全生命周期管理、監(jiān)控告警,性能診斷、故障恢復(fù)、備份恢復(fù)等,旨在協(xié)助客戶更加高效地管理和運維OceanBase數(shù)據(jù)庫,降低企業(yè)的IT運維成本和用戶的學(xué)習(xí)成本。得益于TiDB存儲計算分離的架構(gòu)的設(shè)計,可按需對計算、存儲分別進(jìn)行在線擴容或者縮容,擴容或者縮容過程中對應(yīng)用運維人員透明。性價比性采用ApacheLicense2.0開源協(xié)議,企業(yè)版與社區(qū)版差異不大。采用蘭公共協(xié)議MulanPubL-2.0開源。社區(qū)版相比與企業(yè)版功能缺失較多。解決基礎(chǔ)系統(tǒng)軟件“卡脖子”問題認(rèn)識:在操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng)、工業(yè)軟件等基礎(chǔ)系統(tǒng)軟件上,國產(chǎn)軟件存在技術(shù)研發(fā)較國外落后、過度依賴國外開源技術(shù)等問題,這就導(dǎo)致我國較少具有完全自主知識產(chǎn)權(quán)的相關(guān)軟件,處于著被外國先進(jìn)技術(shù)“卡脖子”的局面。如今把科技自立自強作為國家發(fā)展的戰(zhàn)略支撐,打好關(guān)鍵核心技術(shù)攻堅戰(zhàn),已經(jīng)成為我國科技圈的共識。想要解決基礎(chǔ)系統(tǒng)軟件“卡脖子”問題,最重要的是加大對計算機基礎(chǔ)技術(shù)研究的投入。毋庸置疑,如果想要成功研發(fā)一款基礎(chǔ)軟件,則需要大量的基礎(chǔ)理論支持,還要不斷在技術(shù)上進(jìn)行探索和創(chuàng)新。這就需要有更多的資金扶持、更多的研發(fā)人員參與到基礎(chǔ)技術(shù)理論的研究中,這樣才可以打下堅實的底層基礎(chǔ),才能逐步實現(xiàn)基礎(chǔ)軟件自主化。同時還需要擺脫國外基礎(chǔ)系統(tǒng)軟件在國內(nèi)市場上的獨霸地位,讓國產(chǎn)基礎(chǔ)軟件獲得市場的支持,這樣國內(nèi)的技術(shù)和理論才能在實際使用中不斷成熟和完善,以提高市場認(rèn)可度,縮減市場占有率的差距,逐漸打破國外構(gòu)筑起的技術(shù)壁壘。對發(fā)展國產(chǎn)數(shù)據(jù)庫技術(shù)有何建議:隨著社會信息化不斷的發(fā)展,數(shù)據(jù)庫的應(yīng)用場景也越來越多,除了應(yīng)用在傳統(tǒng)的用戶數(shù)據(jù)存儲領(lǐng)域,數(shù)字化城市、數(shù)字化政府、數(shù)字化企業(yè)的構(gòu)建也離不開數(shù)據(jù)庫技術(shù)的支持。所以國產(chǎn)數(shù)據(jù)庫應(yīng)當(dāng)順應(yīng)時代發(fā)展的需求,把握住大數(shù)據(jù)時代的機遇,探索新技術(shù),研發(fā)新架構(gòu),積極開發(fā)面向大數(shù)據(jù)和高性能的新型數(shù)據(jù)庫,這樣才能通過產(chǎn)品功能上的差異化優(yōu)勢在市場上與國外先進(jìn)數(shù)據(jù)庫軟件進(jìn)行有力競爭。除此之外,國產(chǎn)數(shù)據(jù)庫技術(shù)在發(fā)展時也應(yīng)當(dāng)充分考慮信息安全與等級保護(hù)的應(yīng)用場景,研發(fā)適合中國信息安全要求的安全數(shù)據(jù)庫產(chǎn)品。維護(hù)數(shù)據(jù)安全的重要性不言而喻,而數(shù)據(jù)庫作為存儲信息安全最核心部分——數(shù)據(jù),其安全性更是重中之重。由于國外數(shù)據(jù)庫軟件無法徹底保證我國數(shù)據(jù)的安全性,所以國產(chǎn)數(shù)據(jù)庫必須擔(dān)此大任。第2章單選題CBDAB判斷題TTFTF填空題全外連接數(shù)據(jù)約束候選鍵用戶自定義完整性外鍵簡答題1)什么是關(guān)系?它有哪些主要特征?答:關(guān)系是一種由行和列組成的、用于組織存儲實體數(shù)據(jù)的二維表,它具有如下關(guān)系特征。?表中每行存儲實體的一個實例數(shù)據(jù)?表中每列表示實體的一項屬性?表中單元格只能存儲單個值?表中不允許有重復(fù)行?表中不允許有重復(fù)列?表中行順序可任意?表中列順序可任意2)主鍵與候選鍵是什么關(guān)系?在數(shù)據(jù)庫中,主鍵有什么用途?答:在一個關(guān)系中,至少有1個或多個候選鍵。將最具有代表性的候選鍵作為該關(guān)系的主鍵。在數(shù)據(jù)庫中,主鍵具有如下用途:?主鍵屬性列值可用來標(biāo)識關(guān)系表的不同行(元組);?當(dāng)表之間有關(guān)聯(lián)時,主鍵可以作為表之間的關(guān)聯(lián)屬性列;?許多DBMS產(chǎn)品使用主鍵列索引順序來組織表的數(shù)據(jù)塊存儲;?通過主鍵列的索引值可以快速檢索關(guān)系表中行數(shù)據(jù)。3)在什么情況下使用代理鍵?它是如何獲得鍵值?答:在一個關(guān)系中,找不出單個列作為主鍵或沒有合適的多列構(gòu)成復(fù)合鍵時,可定義一個額外的代理鍵作為該關(guān)系的主鍵。在數(shù)據(jù)庫中,代理鍵的鍵值是由DBMS系統(tǒng)自動提供唯一取值的序列數(shù)值。4)如何定義空值?在什么情況下,可以使用空值?答:在進(jìn)行一個關(guān)系的創(chuàng)建定義中,若某列施加了NULL列約束,則該列在使用時允許空值。通常,針對一些不必立刻輸入數(shù)據(jù)的列,可將其列默認(rèn)為空值。5)數(shù)據(jù)庫基礎(chǔ)理論研究對促進(jìn)國產(chǎn)數(shù)據(jù)庫軟件技術(shù)發(fā)展有何作用?答:在數(shù)據(jù)庫軟件技術(shù)發(fā)展中,數(shù)據(jù)庫基礎(chǔ)理論至關(guān)重要,任何一個數(shù)據(jù)庫基礎(chǔ)理論進(jìn)步,均會帶動數(shù)據(jù)庫技術(shù)先前發(fā)展。因此,國產(chǎn)數(shù)據(jù)庫軟件技術(shù)發(fā)展,必須加大數(shù)據(jù)庫基礎(chǔ)理論研究,解決面臨的“卡脖子”問題。5.應(yīng)用題1)關(guān)系R和關(guān)系S的數(shù)據(jù)表如圖2-33所示。請分別計算(a)RхS(b)RS(c)R∞S(d)σR.B=S.B∧R.C=S.C(RхS)圖2-33關(guān)系R和關(guān)系S答:(a)RхS(b)RS(c)R∞S(d)σR.B=S.B∧R.C=S.C(RхS)2)在圖書借閱管理系統(tǒng)中,讀者信息表READER、圖書信息表BOOK、借閱記錄表LOAN定義如下:READER(PerID,Name,Age,TelPhone)BOOK(ISBN,Title,Authors,Publisher)LOAN(PerID,ISBN,Date,Note)使用關(guān)系代數(shù)表達(dá)式寫出下列查詢:答:查找館內(nèi)的“機械工業(yè)出版社”圖書清單Π{ISBN,Title,Authors,Publisher}(σpublisher=’機械工業(yè)出版社’(BOOK))查找在2024-3-6日讀者借還了哪些圖書?Π{ISBN,Title}(σDate=’2024-3-6’(BOOK∞LOAN))c)查找年齡在20歲以下讀者所借圖書目錄Π{ISBN,Title}(σAge<20(READER∞BOOK∞LOAN))第3章單選題CCCCB判斷題FFFFT填空題IBMINSERTINTO數(shù)據(jù)插入語句ALTERTABLE表結(jié)構(gòu)修改語句Sum()函數(shù)LeftJoin簡答題1)SQL語言與程序設(shè)計語言有何區(qū)別?答:SQL語言是一種數(shù)據(jù)操作語言,只能對數(shù)據(jù)庫及其數(shù)據(jù)訪問操作;程序設(shè)計語言是一種實現(xiàn)程序功能邏輯的編程語言,它不但可以操作數(shù)據(jù),也可以流程控制,還可實現(xiàn)輸入輸出處理。2)如何使用子查詢與連接查詢?答:在實現(xiàn)多表關(guān)聯(lián)查詢時,若輸出結(jié)果來自于單個表,則可以所使用子查詢處理。反之,則使用連接查詢處理。3)數(shù)據(jù)完整性包含哪些?SQL語言中如何定義?答:在數(shù)據(jù)庫中,數(shù)據(jù)完整性包括實體完整性、參照完整性、用戶自定義完整性。在SQL語言中,通過主鍵約束定義實體完整性,通過外鍵列與主鍵列的數(shù)據(jù)一致性約束定義參照完整性,用戶可通過列約束實施業(yè)務(wù)規(guī)則來自定義完整性。4)什么是列約束?什么是表約束?它們?nèi)绾螒?yīng)用?答:列約束是指在創(chuàng)建表結(jié)構(gòu)時對列施加的取值約束,如是否空值、是否唯一等。表約束是指在表級施加的規(guī)則,如主鍵、外鍵列定義。在SQL語言中,使用一些關(guān)鍵詞對列施加約束,如NOTNULL(非空)、UNIQUE(值唯一)等。使用CONSTRAIN表約束子句對表施加約束,如外鍵及參照完整性定義。5)在數(shù)據(jù)庫SQL程序編程開發(fā)中,如何實現(xiàn)用戶隱私數(shù)據(jù)保護(hù)?答:在數(shù)據(jù)庫編程開發(fā)中,可以使用視圖方式限制客戶端對一些用戶隱私數(shù)據(jù)訪問,也可對用戶隱私數(shù)據(jù)進(jìn)行加密處理,從而保護(hù)用戶隱私數(shù)據(jù)。第4章單選題CBBCB判斷題FFTFF填空題弱實體概念數(shù)據(jù)模型設(shè)計,邏輯數(shù)據(jù)模型設(shè)計,物理數(shù)據(jù)模型設(shè)計1對1,1對多,多對多標(biāo)識符依賴弱實體,非標(biāo)識符依賴弱實體決定因子,依賴函數(shù)簡答題1)在數(shù)據(jù)庫設(shè)計過程中,各層次數(shù)據(jù)模型的用途是什么?答:概念數(shù)據(jù)模型用于數(shù)據(jù)庫設(shè)計人員與用戶進(jìn)行交流與溝通;邏輯數(shù)據(jù)模型用于系統(tǒng)設(shè)計者描述數(shù)據(jù)庫設(shè)計結(jié)構(gòu);物理數(shù)據(jù)模型針對所使用的具體數(shù)據(jù)庫軟件,給出數(shù)據(jù)庫實現(xiàn)模型。2)針對復(fù)雜信息系統(tǒng)的數(shù)據(jù)庫建模設(shè)計,應(yīng)采用什么設(shè)計策略?答:采用自頂向下策略、由內(nèi)向外策略方式逐步完成數(shù)據(jù)庫設(shè)計。3)非規(guī)范化的數(shù)據(jù)庫設(shè)計會導(dǎo)致哪些問題?答:在數(shù)據(jù)庫中,若數(shù)據(jù)庫設(shè)計不合理,可能會導(dǎo)致數(shù)據(jù)庫操作的插入數(shù)據(jù)異常、更新數(shù)據(jù)異常、刪除數(shù)據(jù)異常,以及數(shù)據(jù)庫訪問性能等問題。4)在系統(tǒng)物理數(shù)據(jù)模型設(shè)計中,需要設(shè)計哪些數(shù)據(jù)庫要素?答:在系統(tǒng)物理數(shù)據(jù)模型設(shè)計中,除了設(shè)計數(shù)據(jù)庫表外,還需要設(shè)計索引、視圖、觸發(fā)器、存儲過程等數(shù)據(jù)庫要素。5)在數(shù)據(jù)庫設(shè)計中,如何解決用戶數(shù)據(jù)的隱私保護(hù)?答:在數(shù)據(jù)庫設(shè)計中,可以將一些包含用戶隱私數(shù)據(jù)通過視圖方式進(jìn)行過濾,防止外部直接訪問包含隱私的數(shù)據(jù)表。此外,通過設(shè)計用戶和角色的數(shù)據(jù)庫對象訪問權(quán)限,防止非法用戶對包含隱私的數(shù)據(jù)表進(jìn)行訪問。第5章單選題BDBCC判斷題TFFTF填空題隔離性,持續(xù)性數(shù)據(jù)庫可串行化收回權(quán)限,拒絕賦予權(quán)限磁帶庫,光盤庫簡答題1)DBMS一般應(yīng)具有哪些主要的數(shù)據(jù)庫管理功能?答:DBMS一般具有數(shù)據(jù)庫定義、數(shù)據(jù)庫運行管理、數(shù)據(jù)庫組織與存儲、數(shù)據(jù)庫維護(hù)、數(shù)據(jù)庫通信。2)在數(shù)據(jù)庫系統(tǒng)中,事務(wù)程序主要解決什么問題?答:事務(wù)程序機制主要確保多用戶對數(shù)據(jù)庫共享訪問的數(shù)據(jù)正確性。3)在數(shù)據(jù)庫系統(tǒng)中,如何預(yù)防事務(wù)死鎖狀況出現(xiàn)?答:在并發(fā)事務(wù)執(zhí)行時,使產(chǎn)生死鎖的四個必要條件(互斥條件、請求和保持條件、不剝奪條件、環(huán)路等待條件)之一不成立,就可以最大可能地預(yù)防死鎖。4)數(shù)據(jù)庫系統(tǒng)基本安全模型是什么?它是如何實現(xiàn)數(shù)據(jù)安全訪問?答:數(shù)據(jù)庫系統(tǒng)基本安全模型是DBMS提供的用戶存取權(quán)限控制模型。它采用角色、用戶對數(shù)據(jù)庫對象的訪問權(quán)限約束實現(xiàn)數(shù)據(jù)安全訪問。5)實現(xiàn)數(shù)據(jù)庫恢復(fù)的技術(shù)原理是什么?答:數(shù)據(jù)庫恢復(fù)技術(shù)是利用數(shù)據(jù)庫備份文件和數(shù)據(jù)庫事務(wù)日志文件來實現(xiàn)數(shù)據(jù)庫恢復(fù)處理。具體將根據(jù)用戶恢復(fù)要求,采用前滾事務(wù)方式或回滾事務(wù)方式恢復(fù)數(shù)據(jù)庫。第6章選擇題1)C2)D3)D4)C5)B判斷題1)F2)F3)T4)T5)T填空題1)數(shù)據(jù)庫服務(wù)器端2)語句級觸發(fā)器,行級觸發(fā)器3)INSTEADOF觸發(fā)器4)BEFORE,AFTER5)NEW,OLD簡答題PostgreSQL數(shù)據(jù)庫創(chuàng)建、修改和刪除存儲過程使用哪些主要命令?答:PostgreSQL使用CREATEPROCEDURE創(chuàng)建存儲過程,包括存儲過程的名稱、輸入?yún)?shù)、輸出參數(shù)、以及存儲過程體。使用CREATEORREPLACEPROCEDURE重新創(chuàng)建存儲過程,對已有存儲過程的源碼編輯修改后重新創(chuàng)建。如果只需要修改存儲過程擁有者、存儲過程的名字、存儲過程所屬模式等進(jìn)行修改,使用ALTERPROCEDURE命令修改存儲過程。當(dāng)用戶創(chuàng)建存儲過程之后,可能需要刪除,DROPPROCEDURE刪除現(xiàn)有過程的定義。使用存儲過程編程,在應(yīng)用上有哪些優(yōu)點?答:(1)提高代碼復(fù)用性。存儲過程可以重復(fù)調(diào)用,如果多次需要實現(xiàn)這些SQL語句,就可以重復(fù)調(diào)用這些存儲過程,可以減少數(shù)據(jù)庫開發(fā)人員的工作量。(2)減少網(wǎng)絡(luò)流量。存儲過程位于數(shù)據(jù)庫服務(wù)器上,用戶只需要傳遞存儲過程的名稱和參數(shù)就可以調(diào)用,存儲過程只需要將執(zhí)行結(jié)果返回客戶端程序,而不需要將大量的服務(wù)器端數(shù)據(jù)傳輸?shù)娇蛻舳顺绦?,降低了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。(3)提高了安全性。存儲過程是存儲在數(shù)據(jù)庫中的對象,用戶執(zhí)行需要相應(yīng)的權(quán)限,只有授權(quán)用戶才能執(zhí)行相應(yīng)的存儲過程,從而避免了對數(shù)據(jù)庫的惡意攻擊,在數(shù)據(jù)庫層面上實現(xiàn)了對數(shù)據(jù)的訪問控制,讓數(shù)據(jù)庫管理員更好地管理和保護(hù)數(shù)據(jù)。(4)數(shù)據(jù)庫事務(wù)處理。當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時,可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用,以確保所有SQL語句或操作的原子性和隔離性。簡述PostgreSQL數(shù)據(jù)庫創(chuàng)建觸發(fā)器的主要步驟?答:使用PostgreSQL創(chuàng)建觸發(fā)器的基本步驟:(1)檢查數(shù)據(jù)庫中將要創(chuàng)建的觸發(fā)器所依附的表或視圖是否存在,如果不存在,必須首先創(chuàng)建該表或視圖。(2)創(chuàng)建觸發(fā)器被觸發(fā)時所要執(zhí)行的觸發(fā)器函數(shù),該函數(shù)的類型必須是TRINGER型,是業(yè)務(wù)處理的邏輯實現(xiàn)。但要注意,有些關(guān)系數(shù)據(jù)庫不需要獨立定義觸發(fā)器函數(shù),而是在創(chuàng)建觸發(fā)器時,將業(yè)務(wù)處理用觸發(fā)器的過程體來實現(xiàn)。(3)創(chuàng)建觸發(fā)器時,一般需要指明觸發(fā)器依附的表、被觸發(fā)的時間、是行級還是語句級觸發(fā)器,觸發(fā)器執(zhí)行需要滿足的條件。4)簡述PostgreSQL數(shù)據(jù)庫的存儲過程和觸發(fā)器的主要區(qū)別?答:(1)觸發(fā)器是被動觸發(fā)的,而存儲過程是主動調(diào)用的。觸發(fā)器是與表相關(guān)聯(lián)的,當(dāng)特定的事件發(fā)生時,自動被觸發(fā)執(zhí)行;而存儲過程是由用戶顯式地調(diào)用執(zhí)行。(2)觸發(fā)器通常用于實現(xiàn)數(shù)據(jù)完整性約束、審計和日志記錄等功能,而存儲過程通常用于封裝業(yè)務(wù)邏輯或復(fù)雜的數(shù)據(jù)操作。(3)觸發(fā)器可以在特定的表上定義,并且可以在語句或行級別上定義,而存儲過程是一個獨立的可執(zhí)行代碼塊,可以在任何地方調(diào)用執(zhí)行。(4)觸發(fā)器不能接收參數(shù),而存儲過程可以接收輸入?yún)?shù)和輸出參數(shù),并可以返回結(jié)果集。(5)觸發(fā)器的執(zhí)行是隱式的,不能被用戶控制,而存儲過程的執(zhí)行是顯式的,由用戶調(diào)用。5)簡述PostgreSQL數(shù)據(jù)庫游標(biāo)編程的主要步驟?答:(1)聲明游標(biāo):在PL/pgSQL中,對游標(biāo)的訪問前,必須聲明游標(biāo)變量,其數(shù)據(jù)類型為refcursor。(2)打開游標(biāo):游標(biāo)變量在使用之前必須先被打開,在PL/pgSQL中有三種形式的OPEN語句,其中兩種用于未綁定的游標(biāo)變量,另外一種用于已綁定的游標(biāo)變量。打開游標(biāo)變量就是執(zhí)行游標(biāo)所綁定的查詢語句,查詢返回值存儲游標(biāo)變量中。(3)使用游標(biāo):在游標(biāo)打開時,游標(biāo)指針就指向游標(biāo)的開始,數(shù)據(jù)庫提供了FETCH和MOVE命令操縱游標(biāo)記錄。但游標(biāo)的打開和讀取必須在同一個數(shù)據(jù)庫事務(wù)中。(4)CLOSE關(guān)閉游標(biāo):其聲明形式為:CLOSEcursorName;當(dāng)游標(biāo)數(shù)據(jù)不再需要時,需要關(guān)閉當(dāng)前游標(biāo),以釋放其占有的系統(tǒng)資源,主要是釋放游標(biāo)中的數(shù)據(jù)所占用的內(nèi)存資源,cursorName是指要關(guān)閉游標(biāo)的名字。5.實踐操作題在簡易教學(xué)管理數(shù)據(jù)庫系統(tǒng)中,定義如下關(guān)系模式:STUDENT(SID,SNAME,AGE,SEX)SC(SID,CID,GRADE)COURSE(CID,CNAME,TEACHER)編寫觸發(fā)器實現(xiàn)表與表之間的參照完整性約束;用Springboot+Mybatis+JSP+PostgreSQL編程實現(xiàn)查詢學(xué)生的各科成績。參考答案:為了實現(xiàn)表與表之間的參照完整性約束,我們需要確保在`SC`表中插入或更新數(shù)據(jù)時,`SID`和`CID`字段分別在`STUDENT`和`COURSE`表中存在。以下是一個簡單的觸發(fā)器示例,用于在PostgreSQL數(shù)據(jù)庫中實現(xiàn)這一點:第1步:創(chuàng)建觸發(fā)器函數(shù),用于檢查參照完整性CREATEORREPLACEFUNCTIONcheck_integrity()RETURNSTRIGGERAS$$BEGIN--檢查學(xué)生ID是否存在于STUDENT表IFNOTEXISTS(SELECT1FROMSTUDENTWHERESID=NEW.SID)THENRAISEEXCEPTION'學(xué)生ID不存在:%',NEW.SID;ENDIF;--檢查課程ID是否存在于COURSE表IFNOTEXISTS(SELECT1FROMCOURSEWHERECID=NEW.CID)THENRAISEEXCEPTION'課程ID不存在:%',NEW.CID;ENDIF;--如果檢查通過,則允許插入或更新RETURNNEW;END;$$LANGUAGEplpgsql;第2步:創(chuàng)建觸發(fā)器,當(dāng)SC表插入或更新數(shù)據(jù)時,調(diào)用上面的函數(shù)CREATETRIGGERtrigger_check_integrityBEFOREINSERTORUPDATEONSCFOREACHROWEXECUTEFUNCTIONcheck_integrity();第3步:使用SpringBoot+MyBatis+JSP+PostgreSQL來實現(xiàn)查詢學(xué)生的各科成績的功能。這里只提供核心代碼的概述,不包括完整的項目結(jié)構(gòu)和所有必要的配置文件。(1)SpringBootController:@RestController@RequestMapping("/students")publicclassStudentController{@AutowiredprivateStudentServicestudentService;@GetMapping("/{sid}/grades")publicResponseEntity<?>getStudentGrades(@PathVariable("sid")Stringsid){try{List<GradeDTO>grades=studentService.getStudentGrades(sid);returnResponseEntity.ok(grades);}catch(Exceptione){returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());}}}(2)ServiceLayer:@ServicepublicclassStudentService{@AutowiredprivateStudentMapperstudentMapper;publicList<GradeDTO>getStudentGrades(Stringsid){returnstudentMapper.findGradesByStudentId(sid);}}(3)MyBatisMapperInterface:

@MapperpublicinterfaceStudentMapper{@Select("SELECTSC.SID,S.SNAME,C.CNAME,SC.GRADE"+"FROMSC"+"JOINSTUDENTSONSC.SID=S.SID"+"JOINCOURSECONSC.CID=C.CID"+"WHERESC.SID=#{sid}")List<GradeDTO>findGradesByStudentId(Stringsid);}(4)DTO(DataTransferObject):publicclassGradeDTO{privateStringsid;privateStringsname;privateStringcname;privateIntegergrade;//GettersandSetters}(5)JSPView(簡單示例,顯示學(xué)生的成績列表):<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>學(xué)生成績</title></head><body><h2>學(xué)生成績列表</h2><tableborder="1"><tr><th>學(xué)生ID</th><th>學(xué)生姓名</th><th>課程名稱</th><th>成績</th></tr><c:forEachvar="grade"items="${grades}"><tr><td>${grade.sid}</td><td>${grade.sname}</td><td>${ame}</td><td>${grade.grade}</td></tr></c:forEach></table></body></html>請注意,這只是核心程序,實際的實現(xiàn)需要更多的配置和代碼,比如SpringBoot的perties配置文件,MyBatis的配置文件和映射文件,以及SpringBoot的啟動類等。此外,JSP頁面需要與SpringMVC模型整合,以便從后端獲取數(shù)據(jù)并展示在前端頁面上。第7章單選題DDABD判斷題TTFFT填空題1)最終一致性2)集合3)分區(qū)容錯性4)4個(local、admin、config和test數(shù)據(jù)庫)5)CypherQueryLanguage簡答題NoSQL的特征是什么?答:NoSQL數(shù)據(jù)庫并沒有一個統(tǒng)一的架構(gòu),但是它們有一些共同特征。(1)不需要預(yù)定義模式:不需事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)等。數(shù)據(jù)中每條記錄都可能有不同的屬性和格式.(2)無共享架構(gòu):NoSQL往往將數(shù)據(jù)劃分后存儲在各個本地服務(wù)器上,從而提高了系統(tǒng)的性能.(3)彈性可擴展:可以在系統(tǒng)運行的時候,動態(tài)增加或者刪除結(jié)點。不需要停機維護(hù),數(shù)據(jù)可以自動遷移.(4)分區(qū):NoSQL數(shù)據(jù)庫將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個節(jié)點上面,并且通常分區(qū)的同時還要做復(fù)制.(5)異步復(fù)制:NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫入一個節(jié)點,而不會出現(xiàn)網(wǎng)絡(luò)傳輸遲延.(6)BASE:相對于ACID特性,NoSQL數(shù)據(jù)庫保證的是BASE特性(BASE是最終一致性和軟事務(wù))。Redis支持的數(shù)據(jù)類型有哪些?在這些類型上有哪些操作?答:Redis支持的數(shù)據(jù)類型String,Hash,List,Set,Sortedset。針對Strings類型的key-value數(shù)據(jù),可進(jìn)行set,get,decr,incr,mget操作。針對Hash類型數(shù)據(jù),可進(jìn)行hget,hset,hgetall操作。針對List數(shù)據(jù),可進(jìn)行l(wèi)push,rpush,lpop,rpop,lrange等操作。針對Set數(shù)據(jù),可進(jìn)行sadd,spop,smembers,sunion等操作。針對SortedSet數(shù)據(jù),可進(jìn)行zadd,zrange,zrem,zcard等操作。3)MongoDB的存儲架構(gòu)是什么?答:Mongodb采用文檔、集合來組成數(shù)據(jù)庫。文檔是MongoDB中數(shù)據(jù)的基本單元和核心概念,集合可以被看作沒有模式的表。MongoDB每個實例都可容納多個獨立數(shù)據(jù)庫,每個數(shù)據(jù)庫都有自己的集合和權(quán)限(數(shù)據(jù)庫)。4)Neo4j的數(shù)據(jù)模型是什么?請舉例說明結(jié)點、關(guān)系、屬性、標(biāo)簽的含義。答:Neo4J的數(shù)據(jù)模型由結(jié)點、關(guān)系組成。結(jié)點和關(guān)系都可以包含屬性。結(jié)點和關(guān)系代表一行數(shù)據(jù)。屬性是數(shù)據(jù)庫行中的字段。標(biāo)簽代表結(jié)點和關(guān)系的分組。5)HBASE的存儲結(jié)構(gòu)?答:HBASE數(shù)據(jù)庫按照表來組織數(shù)據(jù)存儲。在表中分為若干區(qū)域,在每個區(qū)域中又分為若干存儲單元,每個存儲單元由若干存儲文件組成。5.實踐操作題用HBase存儲社交網(wǎng)站站內(nèi)短信信息,要求記錄發(fā)送者、接收者、時間、內(nèi)容,有關(guān)的查詢是發(fā)送者可以列出他所有(或按時間段)發(fā)出的信息列表(按時間降序排列),接收者可以列出他所有(或按時間段)收到的信息列表(按時間降序排列)。1)設(shè)計社交網(wǎng)站短信息管理的數(shù)據(jù)庫結(jié)構(gòu)?2)在HBASE中創(chuàng)建數(shù)據(jù)表?3)請使用HBaseShell實現(xiàn)相關(guān)的功能。。4)請使用HBaseJavaAPI實現(xiàn)相關(guān)的功能。答:要記錄作者在網(wǎng)絡(luò)上發(fā)表的各類文章在關(guān)系數(shù)據(jù)庫中需要設(shè)計3個表格:文章表Article(id文章ID,title文章標(biāo)題,content文章內(nèi)容,tags文章標(biāo)簽),作者表Author(id作者ID,name姓名,nickname昵稱),日志表Blog(Blog_ID日志ID,article_id文章ID,Author_id作者ID,pub_time發(fā)表時間,...)。所有作者要在作者表中等級相關(guān)信息得到作者ID,發(fā)表文章時要等文章表中進(jìn)行等級和日志表中記錄作者ID、文章ID、發(fā)表時間等信息,開發(fā)相關(guān)的應(yīng)用程序?qū)@三個表格進(jìn)行操作,完成對每個作者發(fā)布的文章的相關(guān)信息進(jìn)行存儲管理。按照上面的需求HBase設(shè)計表結(jié)構(gòu)為HBlog,行鍵是ID、列簇有兩個Article和Author。使用HBASE的shell創(chuàng)建表的句子是create'HBlog','Article','Author'創(chuàng)建表格,創(chuàng)建只需要給出表中得列簇名稱,使用put語句把作者發(fā)表的文章的信息寫入到HBlog表中的創(chuàng)建只需要給出表中得列簇名稱,列簇中的列是在操作時根據(jù)數(shù)據(jù)的內(nèi)容加進(jìn)去的。為了例子說明,這里Article列簇中有3個列分別是title、content、tags,Author列簇有兩個列分別是name和nickname。HBlog的定義如下:RowKey(行鍵)ColumnFamily(列簇)ColumnKeys(列名稱)IDArticletitle,content,tagsAuthorname,nicknameHBlog的邏輯結(jié)構(gòu)表明這個表的的行鍵和對應(yīng)的兩個列簇,這里列的名稱只是為了和關(guān)系數(shù)據(jù)庫中的表格進(jìn)行對比而寫出的。HBlog存儲的信息結(jié)構(gòu)如下:RowKeyTimeStampArticle(列簇)Author(列簇)11318179218111121Article:title="HBasebook"1318179216279829Article:content=Nosql...1318179215898902Article:tages=數(shù)據(jù)庫1318179214466785A=Xixi...1318179213577898Author.nickname=.xyz.1318179212512001Author.nickname=.abc.1010011…上面的HBlog存儲的信息結(jié)構(gòu)通過了對數(shù)據(jù)的操作得到的數(shù)據(jù)庫中數(shù)據(jù)的內(nèi)容表示,對行鍵為1的行數(shù)據(jù)在不同的時間內(nèi)經(jīng)過了6次修改,修改的內(nèi)容包括文章表中的title、content、tags和作者表中的name和nickname對應(yīng)的內(nèi)容,表明該作者發(fā)表了1篇文章,并對自己的nickname進(jìn)行了修改。列可以在使用中動態(tài)增加,同一列簇的列會群聚在一個存儲單元上,應(yīng)將具有相同I/O特性的列設(shè)計在一個列簇上以提高性能,列根據(jù)應(yīng)用的需求變化,適合非結(jié)構(gòu)化數(shù)據(jù);HBase通過行和列確定單元數(shù)據(jù),數(shù)據(jù)的值可能有多個版本,不同版本的值按照時間倒序排列,即最新的數(shù)據(jù)排在最前面,查詢時默認(rèn)返回最新版本。如上例中行鍵1的Author:nickname值有兩個版本,分別為1318179213577898對應(yīng)的“xyz”和1318179212512001對應(yīng)的“abc”(對應(yīng)到實際業(yè)務(wù),可理解為作者在某時刻修改了nickname為xyz,但舊值仍然存在)。時間戳默認(rèn)為系統(tǒng)當(dāng)前時間(精確到毫秒),也可以在寫入數(shù)據(jù)時指定該值;每個單元格值通過4個值唯一索引,表名稱+行鍵+列簇名稱:列名稱+時間戳所對應(yīng)的值,例如上例中{tableName='HBlog',RowKey='1',ColumnName='author:nickname',TimeStamp='1318179213577898'}索引到的唯一值是“xyz”1)數(shù)據(jù)結(jié)構(gòu)--表結(jié)構(gòu)為HBlog,行鍵是ID、列簇有兩個Article和AuthorRowKey(行鍵)ColumnFamily(列簇)ColumnKeys(列名稱)IDArticletitle,content,tagsAuthorname,nickname2)在HBASE中創(chuàng)建數(shù)據(jù)表安裝HBASE,啟動HBASE,啟動HBASEshell出現(xiàn)提示符為hbase(main):001:0>create'HBlog','Article','Author'//創(chuàng)建HBlog3)HBaseShell命令A(yù):在表格中插入數(shù)據(jù)數(shù)據(jù)增加putHBkog1,"Article:title","HBasebook"putHBkog1,"Article:conten"."Nosql"putHBkog1,"Article:tages",,"數(shù)據(jù)庫"putHBkog1,"A","Xixi"putHBkog1,"Author.nickname","xyz."putHBkog1,"Author.nickname",".abc."B數(shù)據(jù)查看查看指定key的數(shù)據(jù)get"HBLog",1顯示已經(jīng)插入的信息C數(shù)據(jù)修改putHBkog"數(shù)據(jù)庫","Article:tages":,"非關(guān)系數(shù)據(jù)庫"D數(shù)據(jù)刪除刪除列:deleteHBkog1,"Article:tages"刪除整行:deleteHBkog1E禁/啟用表禁用disableHBkog啟用enableHBkog4)請使用HBaseJavaAPI實現(xiàn)相關(guān)的功能。使用JavaAPI對HBASE的數(shù)據(jù)進(jìn)行操作,前提條件是成功安裝maven項目和安裝idea開發(fā)工具。利用idea工具創(chuàng)建maven項目,在maven項目中創(chuàng)建如下依賴,主要用于操作hbase<dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.1.3</version></dependency><!--/artifact/org.apache.hbase/hbase--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase</artifactId><version>2.1.3</version><type>pom</type></dependency>完整的Java代碼如下:packagecom.uestc.experiment.hbase1;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.util.Bytes;importjava.io.IOException;publicclassHBaseTest{privatestaticConfigurationconf=HBaseConfiguration.create();privatestaticAdminadmin;privatestaticConnectionconnection=null;static{conf.set("hbase.zookeeper.quorum","");conf.set("perty.clientPort","2181");conf.set("zookeeper.znode.parent","/hbase");try{connection=ConnectionFactory.createConnection(conf);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args)throwsException{HBaseTesthBase=newHBaseTest();hBase.creatTable("dev_info",newString[]{'HBlog','Article','Author'});創(chuàng)建HBlog表hBase.put("HBlog","1","article","title","HBasebook");hBase.get("HBlog","1");hBase.scan("HBlog");hBase.deleteTable("HBlog");System.out.println(admin.tableExists(TableName.valueOf("HBlog")));admin.close();connection.close();}publicvoidcreatTable(StringtableName,String[]family)throwsException{if(admin.tableExists(TableName.valueOf(tableName))){System.out.println("tableExists!");thrownewException("tableExists!");}//通過管理員對象創(chuàng)建表TableDescriptorBuildertableDescriptorBuilder

溫馨提示

  • 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

提交評論