版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、摘 要本文主要介紹了小型數(shù)據(jù)庫管理系統(tǒng)主體功能的設(shè)計與實現(xiàn)。該系統(tǒng)的設(shè)計目的主要用于教學(xué)演示,使學(xué)生通過運行該系統(tǒng)、觀看演示和閱讀代碼等多種方法深入了解數(shù)據(jù)庫管理系統(tǒng)的運行原理。通過設(shè)計并實現(xiàn)該目標系統(tǒng),也有助于制作者提高對數(shù)據(jù)庫原理和基本編譯原理知識的理解,并且進一步熟悉編程語言。該系統(tǒng)由兩人合作完成,本人負責(zé)設(shè)計并實現(xiàn)全部DDL部分及除數(shù)據(jù)庫查詢之外的全部DML部分,還有其中所涉及到的完整性、安全性約束保障等功能。關(guān)鍵詞: 數(shù)據(jù)庫管理系統(tǒng) 數(shù)據(jù)庫定義語言 數(shù)據(jù)庫管理語言AbstractThis paper introduces how to design and realize the D
2、BMS of a mini database. This system is design for teaching. The students can learn the basic principle of the DBMS by using system, watching demonstration or reading codes. In the process of designing and programming for this system, the programmer will study the basic principle of database and comp
3、iler much more deeply. And he will be more familiar with the programming language.This system will be realized by two students. Im in charge of the whole DDL part and most of DML part except for selecting. While some parts for integrity and safe are also in my business.Keywords: DBMS DDL DML目 錄引言31
4、系統(tǒng)的概要介紹51.1 系統(tǒng)模塊分布51.2 底層文件組織61.3 開發(fā)環(huán)境62 SQL指令編譯模塊詳述72.1 Parser Generator使用簡介82.2 語法樹數(shù)據(jù)結(jié)構(gòu)82.3 編譯模塊的調(diào)用123 DDL處理模塊詳述123.1 數(shù)據(jù)庫創(chuàng)建與刪除123.2 數(shù)據(jù)表的創(chuàng)建與刪除143.3 視圖的創(chuàng)建與刪除153.4 索引的創(chuàng)建與刪除163.5 數(shù)據(jù)表模式的修改174 DML處理模塊詳述184.1 插入記錄194.2 刪除記錄194.3 更新記錄204.4 WHERE條件的判斷算法214.5 當(dāng)前數(shù)據(jù)庫指定225權(quán)限處理模塊235.1 用戶管理235.2 權(quán)限控制23權(quán)限審核256 完整
5、性及安全性控制模塊26實體完整性控制Entity Integrity26參照完整性控制Referential Integrity266.3 用戶標識與鑒別266.4 存取控制277 實驗驗證277.1 基礎(chǔ)測試場景277.2 測試方法287.3 測試數(shù)據(jù)288 系統(tǒng)設(shè)計總結(jié)38參考文獻39附錄一 系統(tǒng)底層文件的格式39(一) EDL文件39(二) EDT文件40(三) EDX文件40附錄二 系統(tǒng)主要界面40引言數(shù)據(jù)庫技術(shù)從誕生到現(xiàn)在,在不到半個世紀的時間里,形成了堅實的理論基礎(chǔ)、成熟的商業(yè)產(chǎn)品和廣泛的應(yīng)用領(lǐng)域,吸引越來越多的研究者加入。數(shù)據(jù)庫的誕生和發(fā)展給計算機信息管理帶來了一場巨大的革命。三
6、十多年來,國內(nèi)外已經(jīng)開發(fā)建設(shè)了成千上萬數(shù)據(jù)庫,它已成為企業(yè)、部門乃至個人日常工作、生產(chǎn)和生活的基礎(chǔ)設(shè)施。同時,隨著應(yīng)用的擴展與深入,數(shù)據(jù)庫的數(shù)量和規(guī)模越來越大,數(shù)據(jù)庫的研究領(lǐng)域也已經(jīng)大大地拓廣和深化了。30年間數(shù)據(jù)庫領(lǐng)域獲得了三次計算機圖靈獎(C. W. Bachman, E. F. Codd,J. Gray),更加充分地說明了數(shù)據(jù)庫是一個充滿活力和創(chuàng)新精神的領(lǐng)域。隨著計算機技術(shù)的發(fā)展,數(shù)據(jù)管理技術(shù)經(jīng)歷了人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫系統(tǒng)階段。從用戶直接管理無共享、不獨立的數(shù)據(jù)到由數(shù)據(jù)庫管理系統(tǒng)在提供數(shù)據(jù)安全性、完整性、一致性、并發(fā)控制和恢復(fù)能力的情況下能夠?qū)?shù)據(jù)進行批處理、聯(lián)機實時處理以
7、及分布處理,數(shù)據(jù)庫管理技術(shù)正在以飛一般的速度向前發(fā)展?,F(xiàn)在市面上呈現(xiàn)了許多非常實用的數(shù)據(jù)庫管理系統(tǒng),例如:小型數(shù)據(jù)庫管理系統(tǒng)有FoxPro,Access,Paradox,大型數(shù)據(jù)庫管理系統(tǒng)有SQL Server,DB2,Oracle,Informix,Sybase等等。對于計算機專業(yè)學(xué)生而言,學(xué)習(xí)數(shù)據(jù)庫理論知識的重要性已不言而喻。為了適應(yīng)教學(xué)的需要,幫助學(xué)生更好的掌握數(shù)據(jù)庫系統(tǒng)的基本原理,了解它的工作過程和實現(xiàn)方法,并為之提供數(shù)據(jù)庫管理系統(tǒng)二次開發(fā)的基礎(chǔ),本小組設(shè)計并實現(xiàn)了一個小型數(shù)據(jù)庫管理系統(tǒng)的模型系統(tǒng)。本系統(tǒng)實現(xiàn)后可以幫助今后的學(xué)生更好地理解數(shù)據(jù)庫原理的主要基礎(chǔ)理論,通過使用本系統(tǒng)、觀看演
8、示部分或閱讀代碼等多種手段,加深對這方面知識的理解,從而提高自身對數(shù)據(jù)庫編程理念的掌握程度。本系統(tǒng)有別于前文提到的各種大型商業(yè)化數(shù)據(jù)庫管理系統(tǒng),而是一個非常精簡的教學(xué)模型,制作本系統(tǒng)的主要目的是幫助其他學(xué)生更好地學(xué)習(xí)數(shù)據(jù)庫的基礎(chǔ)理論知識,了解其底層的結(jié)構(gòu)組織和運行方式。著重強調(diào)的是數(shù)據(jù)的存儲與查詢,而沒有將“事務(wù)”、“鎖管理”、“觸發(fā)器”等中高級功能,以及“客戶端/服務(wù)端”等概念列入設(shè)計之中,這樣的安排主要是因為項目的開發(fā)目的是協(xié)助教學(xué),過于復(fù)雜的系統(tǒng)對于學(xué)習(xí)者反而是一種負擔(dān),而且一旦學(xué)習(xí)者對本系統(tǒng)所列功能非常了解,他也能理解其他高級功能的實現(xiàn)原理。本次設(shè)計所開發(fā)的系統(tǒng),旨在能夠通過運行大多數(shù)
9、常見的SQL語句來實現(xiàn)對一定規(guī)模數(shù)據(jù)的存儲管理及查詢。系統(tǒng)主要包括以下幾項功能:² 用戶管理Ø 用戶創(chuàng)建:供管理員添加新用戶Ø 用戶刪除:供管理員刪除用戶Ø 用戶登陸管理:審核使用系統(tǒng)的用戶身份信息,以保障安全性² 權(quán)限管理Ø 權(quán)限授予:使當(dāng)前用戶在合法條件下將自身部分權(quán)限授予他人Ø 權(quán)限回收:使當(dāng)前用戶在合法條件下回收他人的部分權(quán)限² 數(shù)據(jù)庫管理Ø 數(shù)據(jù)庫創(chuàng)建:用于創(chuàng)建新數(shù)據(jù)庫Ø 數(shù)據(jù)庫刪除:用于刪除過期或無效數(shù)據(jù)庫Ø 當(dāng)前數(shù)據(jù)庫指定:指定當(dāng)前操作對象在哪個數(shù)據(jù)庫中Ø 當(dāng)前
10、數(shù)據(jù)庫關(guān)閉:清空當(dāng)前的數(shù)據(jù)庫指定信息² 數(shù)據(jù)表管理Ø 數(shù)據(jù)表創(chuàng)建:用于創(chuàng)建新數(shù)據(jù)表Ø 數(shù)據(jù)表刪除:用于刪除過期或無效數(shù)據(jù)表Ø 數(shù)據(jù)表模式修改:使用戶可以修改某張現(xiàn)有數(shù)據(jù)表的字段模式Ø 數(shù)據(jù)記錄管理l 數(shù)據(jù)記錄插入:在某張現(xiàn)有數(shù)據(jù)表中插入一條新紀錄l 數(shù)據(jù)記錄刪除:在某張現(xiàn)有數(shù)據(jù)表中刪除符合指定條件的一組記錄l 數(shù)據(jù)記錄更新:在某張現(xiàn)有數(shù)據(jù)表中更新符合指定條件的一組記錄² 視圖管理Ø 視圖創(chuàng)建:用于創(chuàng)建新視圖Ø 視圖刪除:用戶創(chuàng)建過期或無效的視圖² 索引管理Ø 索引創(chuàng)建:供數(shù)據(jù)表的創(chuàng)建者對記錄創(chuàng)建
11、索引Ø 索引刪除:供數(shù)據(jù)表的創(chuàng)建者刪除本表相關(guān)的索引Ø 索引維護:供DML模塊更新記錄后,刷新指定數(shù)據(jù)表相關(guān)的全部索引² 數(shù)據(jù)庫查詢 非本人制作:供用戶按條件查看某些記錄集合的內(nèi)容² 運行過程演示 非本人制作:供學(xué)生觀看系統(tǒng)運行過程的動態(tài)演示1 系統(tǒng)的概要介紹1.1 系統(tǒng)模塊分布圖1-1 系統(tǒng)整體框架系統(tǒng)主要包含以下模塊Ø SQL解析模塊Ø DDL處理模塊Ø DML處理模塊Ø 權(quán)限處理模塊Ø 完整性和安全性控制模塊系統(tǒng)中的SQL解析模塊,其功能是解析SQL語句,使用Parse Generator編譯器作為
12、詞法和語法分析器,Parse Generator是一款由英國公司編制的編譯器。數(shù)據(jù)定義語言處理模塊,處理對數(shù)據(jù)庫的創(chuàng)建、刪除、打開和關(guān)閉;對數(shù)據(jù)表的創(chuàng)建、刪除和修改;對視圖的定義和刪除;還有對索引的創(chuàng)建及刪除。數(shù)據(jù)操縱語言處理模塊,處理對記錄的添加、刪除、更新及查詢。權(quán)限處理模塊,負責(zé)用戶互相之間權(quán)限的授予和回收,以及執(zhí)行其他各類操作時的審核過程。而完整性和安全性控制模塊負責(zé)執(zhí)行各項審核,以保證系統(tǒng)內(nèi)數(shù)據(jù)的一致性、安全性和完整性。當(dāng)用戶輸入某SQL語句后,系統(tǒng)最先啟用SQL語言解析模塊,分析其詞法語法是否符合SQL指令的文法規(guī)定,如符合,則同時記錄其有效信息部分。之后必然進入安全性和完整性模塊
13、,從而進行各類審查。通過審查后,根據(jù)解析結(jié)果的不同,分別將進入DDL、DML或權(quán)限處理模塊,進而執(zhí)行不同的操作并顯示結(jié)果。1.2 底層文件組織圖1-2 系統(tǒng)底層文件組織1.3 開發(fā)環(huán)境本系統(tǒng)的開發(fā)環(huán)境為Visual Studio 6.0 ,開發(fā)語言為C+ ,編譯部分使用了代碼生成器工具Parser Generator 。Parser Generator這款工具可以根據(jù)用戶定義的詞法及語法規(guī)則,將源語言編譯為C+或JAVA等目標語言,并可按要求執(zhí)行附加操作。本系統(tǒng)中通過將Parser Generator生成的代碼文件導(dǎo)入系統(tǒng)工程,來完成對用戶輸入的SQL語句文法規(guī)則的檢查,并同時將SQL語句中的
14、有效信息部分存儲至自定義數(shù)據(jù)結(jié)構(gòu)的相應(yīng)結(jié)點變量中。開發(fā)過程對硬件并無過高要求,普通家用配置計算機即可完成開發(fā)過程。而在軟件配置方面,除需要安裝Parser Generator和Visual Studio以外,還需對VC的開發(fā)環(huán)境做如下配置:設(shè)置Tools->Options->Directories的Include files:.cppincludeLibrary files:.cpplibmsvc32Source files:.cppsource其中“.”為pargen安裝目錄設(shè)置Project->Settings->C/C+ Category下拉菜單中General:
15、對應(yīng)Win32 Debug在Preprocessor definitions 中加入YYDEBUG,YYDLL對應(yīng)Win32 Release在Preprocessor definitions 中加入YYDLL下拉菜單Precompiled Headers選中第二個Automatic use of precompiled headers設(shè)置Project->Settings->Link對應(yīng)Win32 Debug在Object/library modules中加入ylmtrid.lib;對應(yīng)Win32 Release在Object/library modules中加入ylmtri.li
16、b。要設(shè)置動態(tài)連接庫,把.cpplibmsvc32中的ylmtrid.dll和ylmtri.dll放在運行目錄下,或者把系統(tǒng)的環(huán)境變量的Path中加入.cpplibmsvc322 SQL指令編譯模塊詳述SQL指令解析模塊主要負責(zé)核查用戶輸入的SQL指令是否符合相應(yīng)的文法規(guī)則,如果符合,則同時將SQL指令中的有效信息部分記錄到全局變量TheOutput所指引的語法樹結(jié)構(gòu)中。TheOutput的類型為自定義數(shù)據(jù)類型StatementST,其成員變量包括整數(shù)型變量TheID以及一系列指向其他自定義數(shù)據(jù)類型的指針。TheID內(nèi)記錄的數(shù)值即標示其他指針型的成員變量何者有效。同一時間內(nèi),最多有一個指針成員
17、非空,指向相應(yīng)SQL指令語法樹的自定義數(shù)據(jù)結(jié)構(gòu)。當(dāng)用戶輸入的SQL語句錯誤時,TheID內(nèi)的數(shù)值為99,其余全部指針變量全部為空。舉例來說,設(shè)有如下SQL語句:select distinct Student.SNamefrom studentwhere Student.SName="Jack"order by Student.SName DESC;則SQL語言解析模塊首先對該語句進行詞法和語法分析,并且把結(jié)果賦給全局變量TheOutput,例中的語句分析完成后,全局變量TheOutput的各個成員的值如下所示:TheOutput->TheID=0; 說明該語句是SEL
18、ECT語句;TheOutput->RL->ReturnType=2;說明語句要求返回distinct型的記錄;TheOutput->RL->RFL->TableName=Student 說明要返回的字段在Student表中;TheOutput->RL->RFL->FieldName=SName 說明要返回字段SName;TheOutput->TableName=Student; 表示查詢的表名是Student;TheOutput->OL->AoD=0; 表示返回的記錄按字段降序排列;2.1 Parser Generator使用簡
19、介安裝好Parser Generator以后啟動它的主程序,填入工程名,確定工程所在路徑,選擇目標語言為C+,然后讓程序自動創(chuàng)建兩個文件和。其中,文件用于詞法分析的部分,而文件用于語法分析的部分,在這兩個文件中用注釋的方式明確標明了各個代碼段的書寫位置,只要按照它的規(guī)定書寫即可。在.l文件中,有一句默認的",在這句話下包含其他所需文件并申明全局變量或外部變量。在/ place any declarations here這句注釋的下面,填寫一些無返回值的申明。例如“IDENTIFIER a-zA-Z_a-zA-Z0-9_#*”,這句表示當(dāng)掃描到以大小寫字母開頭,其后以大小寫字母或數(shù)字或
20、_#這三個符號出現(xiàn)0次獲多次的字段時,識別為IDENTIFIER。在/ place your Lex rules here這句注釋的下面,填寫帶有返回值的申明,例如“add|ADD return ADD ;”這句,表示當(dāng)掃描到小寫的add或大寫的ADD時,識別為大寫的ADD返回。在.y文件中,有一句默認的#include "mylexer.h",在這句話下邊包含其他所需文件并申明一些全局變量或外部變量。在/ place any declarations here這句注釋的下面,填寫所有的token申明。token申明就是一句語句或命令中的標志性成分,例如:Open Data
21、base001,Open就是一個Token,而Database001是一個IDENTIFIER型的Token。在/ place your YACC rules here (there must be at least one)這句注釋下面填寫正式的語法申明部分,例如“dbname: IDENTIFIER”,表明dbname就是單個的IDENTIFIER,又比如“open: OPEN dbname”表明open這一句式是由OPEN這個Token和句式dbname的組合,而在文件下方需要再定義dbname這個句式。在/ programs section這句注釋的下面有一個默認的Int型的函數(shù)Mai
22、n,為了方便之后的處理將其改為被調(diào)用的一個函數(shù)parse。2.2 語法樹數(shù)據(jù)結(jié)構(gòu)本節(jié)將以圖表形式介紹整個系統(tǒng)中用以存儲編譯后的各SQL指令的自定義數(shù)據(jù)結(jié)構(gòu)。圖2-1 Select語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-2 Where條件運算樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-3 Create Table語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-4 Create View 語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-5 Create Index語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-6 Insert語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-7 Update語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-8 Delete 語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-9 Alter Table Add
23、語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-10 Alter Table Modify語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-11 Alter Table Drop 語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-12 Grant語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)圖2-13 Revoke 語句語法樹自定義數(shù)據(jù)結(jié)構(gòu)2.3 編譯模塊的調(diào)用將Parser Generator工程目錄下的全部文件復(fù)制到VC系統(tǒng)的工程目錄中,將2組代碼文件和頭文件導(dǎo)入VC系統(tǒng)的工程,并對編譯器環(huán)境及工程環(huán)境做相應(yīng)設(shè)置。之后,當(dāng)需要在VC的工程中使用編譯模塊的主函數(shù)時,只需要在相應(yīng)的.cpp文件首部Include編譯部分的兩個頭文件,并聲明編譯部分的主函數(shù),即可在之后的任何
24、函數(shù)或類中調(diào)用解析部分的主函數(shù),以實現(xiàn)對SQL指令進行解析的目的。需要注意的是,解析的輸入接口為某個指定文件,故需要通過系統(tǒng)將用戶在系統(tǒng)界面控件中輸入的SQL語句緩存至本系統(tǒng)的臨時文件中,方能進行之后的解析步驟。3 DDL處理模塊詳述DDL,即數(shù)據(jù)定義語言。包括有數(shù)據(jù)庫的創(chuàng)建與刪除,數(shù)據(jù)表的創(chuàng)建與刪除,視圖的創(chuàng)建與刪除,索引的創(chuàng)建與刪除,數(shù)據(jù)表模式的修改。本模塊全部由筆者設(shè)計完成,以下將逐一詳細敘述。3.1 數(shù)據(jù)庫創(chuàng)建與刪除 對應(yīng)的SQL語句創(chuàng)建數(shù)據(jù)庫:CREATEDATABASE <數(shù)據(jù)庫名> ;刪除數(shù)據(jù)庫:DROPDATABASE <數(shù)據(jù)庫名> ;3.1.2 相應(yīng)底
25、層文件介紹系統(tǒng)根目錄下有兩個文件夾,分別名為“DDL”和“DATA”,DDL文件夾內(nèi)放置各類數(shù)據(jù)字典信息文件,DATA文件夾內(nèi)放置數(shù)據(jù)信息文件。在DDL目錄下,存在一個名為DB_List.edl的二進制流文件,該文件為數(shù)據(jù)庫清單文件。記錄了每個數(shù)據(jù)庫的名稱和創(chuàng)建者。當(dāng)創(chuàng)建一個數(shù)據(jù)庫時,分別在DDL和DATA文件夾內(nèi)生成同名子文件夾,文件夾名同數(shù)據(jù)庫名。在/DDL/<數(shù)據(jù)庫名>/目錄下,新建Table、View和Index三個文件夾和Privilege.edl文件,三個文件夾分別放置該數(shù)據(jù)庫下的數(shù)據(jù)表、視圖和索引的數(shù)據(jù)字典信息文件,而Privilege.edl文件放置該數(shù)據(jù)庫內(nèi)各種數(shù)
26、據(jù)對象的權(quán)限信息。Table文件夾內(nèi)含有Table_List.edl和ForeignKey_List.edl兩個清單文件,Table_List.edl文件為該數(shù)據(jù)庫內(nèi)的數(shù)據(jù)表清單文件,記錄了每張數(shù)據(jù)表的名稱和創(chuàng)建者。ForeignKey_List.edl文件為表級關(guān)聯(lián)的信息文件,記錄了各張表之間的表級約束信息。View文件夾內(nèi)含有View_List.edl清單文件,記錄了每個視圖的名稱和創(chuàng)建者。Index文件夾內(nèi)含有Index_List.edl清單文件,記錄了每個索引的名稱、創(chuàng)建者和該索引所基于的數(shù)據(jù)表名稱。而在/DATA/<數(shù)據(jù)庫名>/目錄下,同樣含有Table、View和Ind
27、ex三個文件夾,但是當(dāng)數(shù)據(jù)庫內(nèi)沒有被創(chuàng)建任何具體的數(shù)據(jù)對象時,這三個文件夾內(nèi)不存在任何文件。3.1.3 處理流程圖3-1 創(chuàng)建或刪除數(shù)據(jù)庫的流程 數(shù)據(jù)表的創(chuàng)建與刪除對應(yīng)的SQL語句創(chuàng)建數(shù)據(jù)表:CREATETABLE<數(shù)據(jù)表名>PRIMARY( <主鍵1> , <主鍵2> , )FOREIGN( <外鍵1> REFERENCES <被參照表1> . <被參照字段1> )FOREIGN( <外鍵2> REFERENCES <被參照表2> . <被參照字段2> )(<字段名1> &
28、lt;字段1類型> <字段1寬度> ,<字段名2> <字段2類型> <字段2寬度> , ) ;或:CREATETABLE<數(shù)據(jù)表名>PRIMARY( <主鍵1> , <主鍵2> , )(<字段名1> <字段1類型> <字段1寬度> ,<字段名2> <字段2類型> <字段2寬度> , ) ;創(chuàng)建數(shù)據(jù)表:DROPTABLE<數(shù)據(jù)表名> ;相應(yīng)底層文件介紹每創(chuàng)建一張數(shù)據(jù)表,則在/DDL/<數(shù)據(jù)庫名>/Table/目錄
29、下,創(chuàng)建一個與新數(shù)據(jù)表名相同的.edl文件,用以記錄該數(shù)據(jù)表模式中每個字段的名稱、類型、寬度、是否為主鍵等信息。同時在/DATA/<數(shù)據(jù)庫名>/Table/目錄下,創(chuàng)建一個與新數(shù)據(jù)表名相同的.edt文件,用以日后存放該數(shù)據(jù)表內(nèi)的記錄信息。 處理流程圖3-2 創(chuàng)建或刪除數(shù)據(jù)表的流程 視圖的創(chuàng)建與刪除對應(yīng)的SQL語句創(chuàng)建視圖: CREATEVIEW <視圖名> AS SELECT ;刪除視圖: DROPVIEW <視圖名> ; 相應(yīng)底層文件介紹每創(chuàng)建一份視圖,則在/DATA/<數(shù)據(jù)庫名>/View/目錄下,創(chuàng)建一個與新視圖名相同的.edx文件,用以記
30、錄創(chuàng)建該視圖的原始SQL語句中的關(guān)鍵部分的文字信息。創(chuàng)建視圖時,僅保存了相應(yīng)的原始SQL語句信息,并未生成相應(yīng)的數(shù)據(jù)表文件,故僅當(dāng)該視圖被合法用戶查詢時,才對目標數(shù)據(jù)表信息做各類篩選操作。處理流程圖3-3創(chuàng)建或刪除視圖的流程 索引的創(chuàng)建與刪除對應(yīng)的SQL語句創(chuàng)建索引: CREATEINDEX <索引名> ON <數(shù)據(jù)表名> ( <字段1> <排序信息> ,<字段2> <排序信息> , ) ;刪除索引: DROPINDEX <索引名> ;3.4.2 相應(yīng)底層文件介紹每創(chuàng)建一份索引,則在/DDL/<數(shù)據(jù)庫名&
31、gt;/Index/目錄下,創(chuàng)建一個與新索引名相同的.edl文件和一個同名的.edx文件,前者用以記錄該索引的字段升降序信息,后者用以記錄原始的SQL指令語句,以便之后維護索引時使用。同時在/DATA/<數(shù)據(jù)庫名>/Table/目錄下,創(chuàng)建一個與新索引名相同的.edt文件,通過讀取目標數(shù)據(jù)表內(nèi)的信息,并進行排序,將排序后的序列編號依次寫入該文件內(nèi)。處理流程圖3-3創(chuàng)建或刪除索引的流程 數(shù)據(jù)表模式的修改對應(yīng)的SQL語句添加字段: ALTER TABLE <數(shù)據(jù)表名> ADD (<字段名1> <字段1類型> <字段1寬度> ,<字段
32、名2> <字段2類型> <字段2寬度> , ) ;刪除字段: ALTER TABLE <數(shù)據(jù)表名> DROP ( <字段1> ,<字段2> , ) ;修改字段: ALTER TABLE <數(shù)據(jù)表名> MODIFY ( <原字段名1> <新字段名1> <新字段1類型> <新字段1寬度> ,<原字段名2> <新字段名2> <新字段2類型> <新字段2寬度> , ) ;處理流程圖3-4 修改數(shù)據(jù)表模式的流程4 DML處理模塊詳述
33、DML,即數(shù)據(jù)操縱語言。包括有記錄的插入、刪除、更新及查詢。本模塊除數(shù)據(jù)查詢以外,均由筆者設(shè)計并完成。以下將逐一詳細敘述。 插入記錄對應(yīng)的SQL語句 INSERT INTO <數(shù)據(jù)表名> ( <字段1> ,<字段2> ,) VALUES ( <字段值1> ,<字段值2> , ) ; 處理流程圖4-1 插入記錄的流程 刪除記錄 對應(yīng)的SQL語句DELETE FORM <數(shù)據(jù)表名>WHERE <條件表達式1> AND|OR <條件表達式2> ; 處理流程圖4-2 刪除記錄的流程4.3 更新記錄對應(yīng)的SQ
34、L語句 UPDATE <數(shù)據(jù)表名> SET <字段1> = <字段1新值> ,<字段2> = <字段2新值> , WHERE <條件表達式1> AND|OR <條件表達式2> ; 處理流程圖4-3 更新記錄的流程4.4 WHERE條件的判斷算法自定義一個堆棧數(shù)據(jù)結(jié)構(gòu),堆棧的結(jié)點可以用來存儲如下各類數(shù)據(jù)(1)單個整數(shù)型變量值(2)單個浮點型變量值(3)單組字符串變量值(4)整數(shù)型變量區(qū)間(5)浮點型變量區(qū)間(6)字符串變量區(qū)間(7)單個布爾型變量值該堆棧數(shù)據(jù)類型可提供入棧操作PUSH,根據(jù)入棧對象的不同,執(zhí)行不同
35、的操作,具體如下:(1)當(dāng)單個變量值入棧,則將其直接壓入棧內(nèi)(2)當(dāng)字段名入棧,則將查找該字段的類型及數(shù)值,轉(zhuǎn)換后壓入棧內(nèi)(3)當(dāng)數(shù)據(jù)表明+字段名格式入棧,則查找并記錄該數(shù)據(jù)表內(nèi)該字段的數(shù)值區(qū)間,轉(zhuǎn)換后壓入棧內(nèi)(4)當(dāng)運算符入棧時,自動彈出棧頂?shù)膬蓚€元素進行相應(yīng)運算,將結(jié)果壓入棧內(nèi);如果發(fā)現(xiàn)運算式非法,如:左右操作數(shù)類型不符且無法轉(zhuǎn)換,則不進行運算,直接壓入一個布爾型結(jié)點,其值為False(5)當(dāng)位運算符入棧時,自動彈出棧頂?shù)膬蓚€元素進行位運算,并將結(jié)果壓入棧內(nèi);如果發(fā)現(xiàn)運算式非法,如:左右操作數(shù)任意一個或全部不是布爾型,則不進行位運算,直接壓入一個布爾型結(jié)點,其值為False有了如上自定義的
36、堆棧類型后,即可處理WHERE語句所表示的條件篩選。編譯SQL語句時,WHERE部分已置于相應(yīng)的語法運算樹中,只需以中序遍歷該語法樹,將便利過程中的每個結(jié)點都進行入棧操作,遍歷之后,即可在堆棧的棧頂獲得條件判斷結(jié)果。此時,正確情況下,棧內(nèi)應(yīng)該有且只有一個元素,且必為布爾型,其值即為判斷結(jié)果。其他情況皆屬非法,可判定為條件不符。4.5 當(dāng)前數(shù)據(jù)庫指定4.5.1 對應(yīng)的SQL語句打開數(shù)據(jù)庫:OPEN<數(shù)據(jù)庫名> ;關(guān)閉數(shù)據(jù)庫:CLOSE<數(shù)據(jù)庫名> ;4.5.2 處理流程打開數(shù)據(jù)庫時,檢查數(shù)據(jù)庫是否存在,不存在則操作失敗,存在,則將數(shù)據(jù)庫名及生成的相應(yīng)底層文件路徑名記錄到全
37、局變量中。關(guān)閉數(shù)據(jù)庫時,清空上述全局變量。5權(quán)限處理模塊 用戶管理用戶管理功能并存在相應(yīng)的SQL語句,故此項功能由對話框操作來完成。用戶管理功能僅對管理員身份的用戶開放,管理員有權(quán)添加、刪除或修改用戶。添加用戶時,僅需設(shè)置其用戶名、密碼及身份信息,故此時的用戶若為一般用戶,則不具備任何操作權(quán)限。5. 用戶級別分類管理員:擁有對系統(tǒng)內(nèi)任何數(shù)據(jù)對象的任意操作權(quán)限普通用戶:將根據(jù)管理員或其他用戶授予的權(quán)限來操作數(shù)據(jù)庫內(nèi)的指定對象5. 底層文件組織在DDL目錄下有一個名為User.edl的文件,記錄了全部用戶的用戶名、密碼及身份信息。5. 用戶登陸系統(tǒng)考慮到數(shù)據(jù)庫的安全性,所有的用戶在進入系統(tǒng)進行操作
38、前,必須先登陸系統(tǒng),在登陸對話框中輸入用戶名及密碼,系統(tǒng)審核通過后方可正常使用系統(tǒng)。如果登陸信息有誤或用戶取消登陸,則系統(tǒng)將自動退出而無法進行其他任何操作。登陸后,系統(tǒng)將把用戶的個人信息記錄到全局變量中,包括用戶名及身份信息。 權(quán)限控制由于數(shù)據(jù)庫管理系統(tǒng)通常用戶眾多,為避免各用戶間發(fā)生非法改動他人數(shù)據(jù)等情況的發(fā)生,管理系統(tǒng)通常對普通用戶的各項操作都需要進行權(quán)限審核。只有當(dāng)系統(tǒng)認定該用戶有權(quán)進行該操作時,其他步驟才會被執(zhí)行。故權(quán)限控制成了系統(tǒng)不可或缺的一部分。 相應(yīng)底層文件介紹在DDL目錄下,有一個名為Privilege.edl的文件,該文件記錄了數(shù)據(jù)庫級別的權(quán)限信息。在/DDL/<數(shù)據(jù)庫
39、名>目錄下,也有一個名為Privilege.edl的文件,該文件記錄了數(shù)據(jù)表和視圖級別的權(quán)限信息。 對應(yīng)的SQL語句權(quán)限授予:GRANT <操作權(quán)限1> ,<操作權(quán)限2> , ON <數(shù)據(jù)對象類型> <數(shù)據(jù)對象1> ,<數(shù)據(jù)對象2> , TO <用戶1> ,<用戶2> , WITH GRANT OPTION;或者:GRANT <操作權(quán)限1> ,<操作權(quán)限2> , ON <數(shù)據(jù)對象類型> <數(shù)據(jù)對象1> ,<數(shù)據(jù)對象2> ,TO <用戶1&g
40、t; ,<用戶2> , ;權(quán)限回收:REVOKE <操作權(quán)限1> ,<操作權(quán)限2> ,ON <數(shù)據(jù)對象類型> <數(shù)據(jù)對象1> ,<數(shù)據(jù)對象2> ,F(xiàn)ROM <用戶1> ,<用戶2> , 處理流程圖5-1 權(quán)限授予或回收的流程權(quán)限審核權(quán)限審核功能主要供其他模塊或函數(shù)調(diào)用,已判斷當(dāng)前用戶是否有權(quán)限進行相應(yīng)操作,其判斷過程如下:(1)判斷當(dāng)前用戶是否管理員身份,如果是,則不論審核的數(shù)據(jù)對象和操作種類為何,皆認為該用戶有權(quán)進行操作;(2)如果用戶非管理員,則判定其是否為操作對象的創(chuàng)建者,如果是創(chuàng)建者,則不論
41、操作種類為何,皆認為該用戶有權(quán)進行操作;(3)如果用戶非管理員亦非指定對象的創(chuàng)建者,則查詢權(quán)限記錄文件,判斷是否存在相應(yīng)的權(quán)限信息記錄,如有,則判為有權(quán)操作,如無,則判為無權(quán)操作。6 完整性及安全性控制模塊完整性及安全性控制模塊主要供其他模塊調(diào)用,故在前文中已略加敘述。接下來將逐一加以補充說明。實體完整性控制Entity Integrity實體完整性規(guī)則:若屬性(指一個或一組屬性)A是基本關(guān)系R的主屬性,則A不能取空值。參照以上規(guī)則,則設(shè)計一個函數(shù),當(dāng)需要對某數(shù)據(jù)表插入一條記錄時,必須核查新紀錄中的全部主鍵是否都非空,如果存在空值,則判為非法,此條記錄不可插入該數(shù)據(jù)表。參照完整性控制Refer
42、ential Integrity參照完整性規(guī)則:若屬性(或?qū)傩越M)F是基本關(guān)系R的外碼,他與基本關(guān)系S的主碼K相對應(yīng)(基本關(guān)系R和S不一定是不同的關(guān)系),則對于R中每個元組在F上的值必須為:l 或者取空值(F的每個屬性值均為空值)l 或者等于S中某個元組的主碼值參照以上規(guī)則,當(dāng)用戶插入一條新記錄,則必須檢查該模式下是否存在外鍵,外鍵字段的新值是否符合上述兩條規(guī)則之一,如符合,則通過此項審核,如不符,則判為非法,此條記錄不可插入該數(shù)據(jù)表。又當(dāng)需要對某數(shù)據(jù)表內(nèi)數(shù)據(jù)進行刪除操作時,需要核查該數(shù)據(jù)表模式是否被其他數(shù)據(jù)表所參照,如果符合WHERE語句的一條或多條記錄被刪除后將破壞參照完整性,則該一條或多
43、條記錄不可被刪除。 用戶標識與鑒別用戶表示和鑒別( Identification & Authentication)是系統(tǒng)提供的最外層安全保護措施。其方法是系統(tǒng)提供一定的方式讓用戶標識自己的名字或身份。每次用戶要求進入系統(tǒng)時,由系統(tǒng)進行核對,通過鑒定后才提供機器使用權(quán)。這部分的函數(shù)已由前文提到的用戶登陸系統(tǒng)所調(diào)用,正常登陸后用戶的用戶名和身份被系統(tǒng)標識,直至關(guān)閉系統(tǒng)。6.4 存取控制存取控制機制主要包括以下兩部分:l 定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中;l 合法權(quán)限檢查。在本系統(tǒng)中,這部分的功能等同于權(quán)限控制功能模塊,故此處不再加以贅述。7 實驗驗證7.1 基礎(chǔ)測試場景(1)系
44、統(tǒng)內(nèi)存在名為“Stu”的數(shù)據(jù)庫,其創(chuàng)建者為管理員身份的用戶“Admin”;(2)系統(tǒng)內(nèi)存在兩名用戶:Admin,其密碼為“Admin”,身份為管理員 ;Steven,其密碼為“1234”,身份為普通用戶(3)系統(tǒng)內(nèi)存在兩張數(shù)據(jù)表: Student表的模式字段名類型寬度主鍵SNoChar8是SNameChar8否SSexInt否SBirthDate否Score表的模式字段名類型寬度主鍵SNoChar8是LNoChar8是ScoreInt否Student表內(nèi)的記錄SNoSNameSSexSBirth002Jack11990-02-04004Mary01991-01-15003Rose01990-1
45、2-25001Tony11992-07-07Score表內(nèi)的記錄SNoLNoScore002004195002001590001007485003004175004007494其中,Score的SNo為外鍵,參照Student中的SNo字段。(4)數(shù)據(jù)字典的權(quán)限記錄文件中為空,故用戶Steven無任何權(quán)限(5)以Admin用戶身份登陸系統(tǒng),并打開數(shù)據(jù)庫Stu7.2 測試方法在“SQL指令控制”對話框中直接輸入相應(yīng)的SQL指令,查看系統(tǒng)結(jié)果提示。如非特殊說明,否則每個Case啟動前,數(shù)據(jù)庫狀態(tài)為基礎(chǔ)測試場景所示。7.3 測試數(shù)據(jù)測試目的場景編號前提場景測試輸入預(yù)期結(jié)果測試結(jié)果檢查OPEN指令編譯
46、狀況1-1OPEN Stu;系統(tǒng)提示“目標數(shù)據(jù)庫已打開!”同預(yù)期,測試通過。1-2OPEN;系統(tǒng)提示“對不起,你輸入的SQL指令存在語法錯誤,請檢查!”同預(yù)期,測試通過檢查CLOSE指令編譯狀況1-3Close Stu;系統(tǒng)提示“已關(guān)閉全部數(shù)據(jù)庫關(guān)聯(lián)!”同預(yù)期,測試通過。1-4Close Stu系統(tǒng)提示“對不起,你輸入的SQL指令存在語法錯誤,請檢查!”同預(yù)期,測試通過。檢查Create Database指令編譯狀況1-5CREATE DATABASE NewDB;系統(tǒng)提示“創(chuàng)建數(shù)據(jù)庫成功!”同預(yù)期,測試通過。1-6CREATE DATABASE 123;系統(tǒng)提示“對不起,你輸入的SQL指令存
47、在語法錯誤,請檢查!”同預(yù)期,測試通過。檢查Drop Database指令編譯狀況1-71-5DROP DATABASE NewDB;系統(tǒng)提示“操作成功,目標數(shù)據(jù)庫已刪除!”同預(yù)期,測試通過。1-81-5DROP DATABASE 123;系統(tǒng)提示“對不起,你輸入的SQL指令存在語法錯誤,請檢查!”同預(yù)期,測試通過。檢查Create Table指令編譯狀況1-9CREATE TABLE NewTable PRIMARY( Field1 )FOREIGN( Field2 REFERENCES Student.SNo )( Field1 int ,F(xiàn)ield2 char(8) ) ;系統(tǒng)提示“創(chuàng)建
48、新數(shù)據(jù)表成功!”同預(yù)期,測試通過。檢查Drop Table指令編譯狀況1-101-9DROP TABLE NewTable ;系統(tǒng)提示“操作成功,目標數(shù)據(jù)表已刪除!”同預(yù)期,測試通過。檢查Create View指令編譯狀況1-11CREATE VIEW NewView AS SELECT SNo ,SNameFROM Student WHERE SSex = 0 ;系統(tǒng)提示“創(chuàng)建新視圖成功!”同預(yù)期,測試通過。檢查Drop View指令編譯狀況1-121-11DROP VIEW NewView ;系統(tǒng)提示“操作成功,目標視圖已刪除!”同預(yù)期,測試通過。檢查Create Index指令編譯狀況1
49、-13CREATE INDEX NewIndex ON Student ( SSex DESC , SNo ASC) ;系統(tǒng)提示“創(chuàng)建新索引成功!”同預(yù)期,測試通過。檢查Drop Index指令編譯狀況1-141-13DROP INDEX NewIndex ;系統(tǒng)提示“操作成功,目標索引已刪除!”同預(yù)期,測試通過。檢查Alter Table Add指令編譯狀況1-15ALTER TABLE Student ADD( SAddress char(40) );系統(tǒng)提示“修改數(shù)據(jù)表模式成功,字段已添加!”同預(yù)期,測試通過。檢查Alter Table Drop指令編譯狀況1-161-15ALTER T
50、ABLE Student DROP( SAddress );系統(tǒng)提示“修改數(shù)據(jù)表模式成功,字段已刪除!”同預(yù)期,測試通過。檢查Alter Table Drop指令編譯狀況1-17ALTER TABLE Student Modify( SSex Sex char(1) );系統(tǒng)提示“修改數(shù)據(jù)表模式成功,字段已修改!”同預(yù)期,測試通過。檢查Insert指令編譯狀況1-18INSERT INTO Student( SNo ,SName )VALUES(“099”,Tom” ) ;系統(tǒng)提示“操作成功,數(shù)據(jù)已插入數(shù)據(jù)表內(nèi)!”同預(yù)期,測試通過。檢查Delete指令編譯狀況1-19DELETE FROM S
51、tudent WHERE SNo= “002” ;系統(tǒng)提示“操作成功,相應(yīng)記錄已被刪除!”同預(yù)期,測試通過。檢查Update指令編譯狀況1-20UPDATE StudentSETSName= “Lina”WHERE SName=Mary” ;系統(tǒng)提示“操作成功,數(shù)據(jù)已被相應(yīng)更新!”同預(yù)期,測試通過。檢查Grant指令編譯狀況1-21GRANT CREATE DROPON NewTable1TO Steven;系統(tǒng)提示“授權(quán)成功,授權(quán)信息已記錄!”同預(yù)期,測試通過。檢查Revoke指令編譯狀況1-221-21REVOKE CREATE DROPON NewTable1FROM Steven ;系
52、統(tǒng)提示“回收成功,相應(yīng)權(quán)限已消除!”同預(yù)期,測試通過。檢查Create Database指令運行狀況2-1CREATE DATABASE NewDB ;(1)系統(tǒng)提示“創(chuàng)建數(shù)據(jù)庫成功!”(2)各底層文件已經(jīng)被創(chuàng)建同預(yù)期,測試通過。2-2CREATE DATABASE Stu ;(1)系統(tǒng)提示“創(chuàng)建失敗,已存在同名數(shù)據(jù)庫!”(2)各底層文件不會被創(chuàng)建同預(yù)期,測試通過。檢查Drop Database指令運行狀況2-3DROP DATABASE Stu ;(1)系統(tǒng)提示“操作成功,目標數(shù)據(jù)庫已刪除!”(2)各底層文件被刪除同預(yù)期,測試通過。2-4DROP DATABASE ABC ;(1)系統(tǒng)提示“
53、錯誤,目標數(shù)據(jù)庫不存在!”(2)各底層文件保持不變同預(yù)期,測試通過。檢查Create Table指令運行狀況2-5CREATE TABLE LessionPRIMARY(LNo)(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系統(tǒng)提示“創(chuàng)建新數(shù)據(jù)表成功!”(2)各底層文件已經(jīng)被創(chuàng)建同預(yù)期,測試通過。2-6未打開任何數(shù)據(jù)庫CREATE TABLE LessionPRIMARY(LNo)(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系統(tǒng)提示“錯誤,目前尚未打開任何數(shù)據(jù)庫!”(2)各底層
54、文件保持不變同預(yù)期,測試通過。檢查Create Table指令運行狀況2-7CREATE TABLE Student PRIMARY( Field1)FOREIGN( Field2 REFERENCES Lession.LNo )( Field1 int,F(xiàn)ield2 char(8) ) ;(1)系統(tǒng)提示“錯誤,已存在同名數(shù)據(jù)對象!”(2)各底層文件保持不變同預(yù)期,測試通過。2-8CREATE TABLE Lession(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系統(tǒng)提示“錯誤,您未設(shè)置任何主鍵!”(2)各底層文件保持不變同預(yù)期,測試通過。2-9CREATE TABLE LessionPRIMARY(ABC)(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(1)系統(tǒng)提示“錯誤,主鍵設(shè)置有誤!”(2)各底層文件保持不變同預(yù)期,測試通過。2-10CREATE TABLE LessionPRIMARY(LNo)FOREIGN ( ABC REFERENCES Score.LNo )(LNo char(8) ,LName char(16) ,Teacher char(8) ) ;(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度茶葉采摘與加工工人雇傭合同書模板4篇
- 2025年度綜合交通樞紐土地及廠房購置合同3篇
- 2025年度能源項目臨時借款合同標準范本4篇
- 二零二五年院落出租與庭院設(shè)計合作協(xié)議3篇
- 2025年版學(xué)校圖書采購與配送服務(wù)合同3篇
- 二零二五版大型活動臨時食堂承包經(jīng)營合同范本3篇
- 二零二五年度彩鋼瓦屋頂智能監(jiān)控與管理系統(tǒng)合同3篇
- 2025年教育機構(gòu)舞蹈培訓(xùn)機構(gòu)勞動合同范本3篇
- 二零二五版文物藝術(shù)品儲藏室租賃與管理協(xié)議2篇
- 二零二五版新材料研發(fā)個人合伙退伙合同范本3篇
- 2023年上海英語高考卷及答案完整版
- 西北農(nóng)林科技大學(xué)高等數(shù)學(xué)期末考試試卷(含答案)
- 金紅葉紙業(yè)簡介-2 -紙品及產(chǎn)品知識
- 《連鎖經(jīng)營管理》課程教學(xué)大綱
- 《畢淑敏文集》電子書
- 頸椎JOA評分 表格
- 員工崗位能力評價標準
- 定量分析方法-課件
- 朱曦編著設(shè)計形態(tài)知識點
- 110kV變電站工程預(yù)算1
- 某系統(tǒng)安全安全保護設(shè)施設(shè)計實施方案
評論
0/150
提交評論