




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)數(shù)據(jù)庫表結構設計書藍夢教育集團有限公司信息系統(tǒng)開發(fā)中心版權所有不得復制二零一六年十月二十三日文檔屬性文檔屬性文件狀態(tài):文件標識:bluedream-pm-04j草稿當前版本:1.0正式發(fā)布作者:正在修改文件密級:普通v 秘密絕密變更記錄日期作者版本變更內(nèi)容審閱者目錄1 引言51.1 目的51.1.1為什么要提供此文檔51.1.2 木文檔主要內(nèi)容51.3閱讀對象61.1.4 適用環(huán)境61.2 項目背景61.2.1為什么要進行此系統(tǒng)項目的開發(fā)工作61.2.2系統(tǒng)將采用“逐級分階段”的模式進行系統(tǒng)擴容61.3 術語定義81.4 參考資料82 數(shù)據(jù)庫表結構設計原則和策略9
2、2.1 系統(tǒng)數(shù)據(jù)庫設計的基本原則92.1.1遵守項目組所制定出的命名規(guī)范92.1.2遵守范式標準和合理地數(shù)據(jù)兀余102.1.3保證數(shù)據(jù)的完整性和一致性112.1.4主鍵定義及主鍵值的合理設置122.1.5在基本數(shù)據(jù)庫表的基礎上可以創(chuàng)建出中間表和臨吋表132.1.6將多對多的關系轉換為一對多的關系142.2 數(shù)據(jù)庫系統(tǒng)安全性設計152.2.1數(shù)據(jù)庫表數(shù)據(jù)訪問的安全保密設計152.2.2數(shù)據(jù)訪問必須要進行身份驗證162.2.3遵守最少權限的角色分配原則162.2.4 防范sql注入攻擊172.2.5充分應用視圖技術提高數(shù)據(jù)庫系統(tǒng)安全性182.2.6對敏感數(shù)據(jù)的訪問需耍應用審計功能182.3 數(shù)據(jù)庫
3、系統(tǒng)的性能優(yōu)化設計192.3.1盡可能提高數(shù)據(jù)庫系統(tǒng)的運行效率192.3.2充分應用數(shù)據(jù)庫系統(tǒng)中的索引技術203 概念設計213業(yè)務實體213.2 實體關系214 物理設計214.1 數(shù)據(jù)庫表設計214.1.1數(shù)據(jù)庫表匯總214.1.2數(shù)據(jù)庫表結構設計214.2 數(shù)據(jù)字典224.3 編碼表225 視圖、存儲過程、觸發(fā)器設計225.1 數(shù)據(jù)視圖225.2 自定義函數(shù)225.3 自定義存儲過程225.4 自定義觸發(fā)器221引言1.1 目的1.1.1為什么要提供此文檔規(guī)范化的軟件文檔是工程化開發(fā)軟件系統(tǒng)的基礎,文檔資料是軟件系統(tǒng)的牛命線。而 一個好的軟件系統(tǒng)設計會讓項目開發(fā)組省時、省力,讓企業(yè)省錢,
4、讓用戶省心。因此,在 整個軟件開發(fā)的生命過程中,軟件系統(tǒng)的設計起著至關重耍的作用一一好的軟件系統(tǒng)的設 計會提高軟件系統(tǒng)的總體質量、節(jié)約開發(fā)成本,同時也是改進質量、按時和按需交付軟件 產(chǎn)品的關鍵因素。從整個軟件系統(tǒng)項目各個開發(fā)階段來看,軟件系統(tǒng)項目的開發(fā)過程可以分為需求、設 計、編碼、測試等主要的階段。其中系統(tǒng)設計承接系統(tǒng)的需求分析并基于準確的系統(tǒng)需求 分析,對項目的目標進行結構化搭建一一軟件系統(tǒng)的需求具有驅動性,而軟件系統(tǒng)的設計 則具有導航性;設計階段所產(chǎn)生出的設計說明書以及設計規(guī)范不僅是后續(xù)系統(tǒng)編碼開發(fā)實 現(xiàn)階段的作業(yè)指導和為編碼人員提供開發(fā)實現(xiàn)的依據(jù),也是系統(tǒng)測試人員開發(fā)相關的測試 用例的
5、指導書;規(guī)范化的設計文檔同時也能夠方便項目的管理人員制定幽項目計劃書并按 其要求布置和控制開發(fā)工作的全過程。本文檔是對藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)總體設計書的進一步擴展,包含有 項目中的各個數(shù)據(jù)庫表結構定義。為此,將本文檔命名為藍夢大學官方網(wǎng)詁及教學平臺 系統(tǒng)數(shù)據(jù)庫表結構設計書(簡稱為藍夢大學官方網(wǎng)站及教學平臺數(shù)據(jù)庫表設計書)。1.1.2本文檔主要內(nèi)容本文檔將描述對“藍夢人學官方網(wǎng)站及教學平臺系統(tǒng)”系統(tǒng)的數(shù)據(jù)庫表結構的說明, 主要包括“概念設計”、“物理設計”、“完整性設計”和“安全性設計”、“性能優(yōu)化 設計”,并最終產(chǎn)牛出“藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)”項目的數(shù)據(jù)庫表結構設計書。1.1.
6、3閱讀對象本文檔主要提供給與“藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)”項目相關的人員閱讀和參 考,主要的人員如下:1、項目管理人員2、系統(tǒng)設計人員3、系統(tǒng)開發(fā)人員4、系統(tǒng)測試人員其中“系統(tǒng)開發(fā)人員”、“系統(tǒng)測試人員”應重點閱讀木文檔的各部分,其他人員可 選擇性閱讀本文檔。1.1.4適用環(huán)境本文檔定義的數(shù)據(jù)結構適用于mysql5.0或更高版本。1-2 項目背景1. 2.1為什么要進行此系統(tǒng)項目的開發(fā)工作藍夢大學近30多年一直從事和開展職業(yè)教育服務、高校師資培訓、企業(yè)信息化咨詢服 務、社會個體it技能培訓等業(yè)務。官方門戶網(wǎng)站在1900年吋就已經(jīng) 正式上線,至今已經(jīng)進行了多次的改版和更新。為能夠適應企業(yè)員工
7、、大學生就業(yè)、高校師資培訓等傳統(tǒng)業(yè)務發(fā)展的需要,同時也能 夠適應新形勢下的在線培訓(e-learning)的業(yè)務需要以擴大培訓中心的業(yè)務量,不僅急切 需要對原有的藍夢大學官方網(wǎng)站進行功能擴展、性能提升、頁而美觀的改進和進一步提高 系統(tǒng)的用戶體驗,而ii也需要將藍夢人學官方網(wǎng)站從一般的培訓課程宣傳擴展為在線培訓 (e-learning)的業(yè)務平臺。1.2.2系統(tǒng)將采用“逐級分階段”的模式進行系統(tǒng)擴容最終能夠構建岀一個網(wǎng)絡化的教學平臺,從而更好地輔助和擴展現(xiàn)有的各個業(yè)務服務。 但考慮到系統(tǒng)開發(fā)的風險和業(yè)務發(fā)展的實際需要,木系統(tǒng)將會采用“逐級分階段”的模式進行系統(tǒng)擴容,而不是“一步到位”的高成本的構
8、建模式一一也就是一期工程首先為官方 門戶網(wǎng)站,二期工程再擴展為網(wǎng)絡教學平臺和培訓業(yè)務工作平臺。1. 3術語定義縮寫、術語解釋課件課件(courseware)是指為課程的教學或學習而編制的計算機程序及相應的 文檔資料。一般采用文字、聲音、圖像、視頻剪輯等多媒體手段制作,并且 可以在線點播觀看或下載后離線觀看。pk“pk”為主鍵(primary key)的縮寫,數(shù)據(jù)庫表通常都由一數(shù)據(jù)列(字段) 或一組數(shù)據(jù)列所組成的,其中的主鍵數(shù)據(jù)列用于唯一地標識數(shù)據(jù)庫表中的每 一數(shù)據(jù)行。這種具有標識作用的數(shù)據(jù)列或數(shù)據(jù)列組稱為主鍵列(也簡稱主 鍵)。fk“fk”為外鍵(foreign key)的縮寫,數(shù)據(jù)庫表外鍵是
9、用于建立和加強兩個 數(shù)據(jù)庫表數(shù)據(jù)之間鏈接的一數(shù)據(jù)列或多數(shù)據(jù)列。通過將保存數(shù)據(jù)庫表中主鍵 值的一數(shù)據(jù)列或多數(shù)據(jù)列添加到另一個數(shù)據(jù)庫表中,可創(chuàng)建兩個數(shù)據(jù)庫表之 間的鏈接。這個數(shù)據(jù)列就成為第二個數(shù)據(jù)庫表的外鍵。1. 4參考資料1、藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)開發(fā)規(guī)范說明書2、藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)需求分析規(guī)約書3、藍夢大學官方網(wǎng)站及教學平臺系統(tǒng)總體設計書2數(shù)據(jù)庫表結構設計原則和策略2.1 系統(tǒng)數(shù)據(jù)庫設計的基本原則數(shù)據(jù)庫的設計就是把數(shù)據(jù)庫中的數(shù)據(jù)對象結構化并規(guī)劃好數(shù)據(jù)庫中的各個對象之間的 關系。系統(tǒng)數(shù)據(jù)庫設計的最終優(yōu)劣,不僅關系到整個系統(tǒng)的性能,也還關系到系統(tǒng)以后的 升級、移植等方面的問題。
10、在數(shù)據(jù)庫系統(tǒng)設計時,設計人員不僅要保證數(shù)據(jù)庫系統(tǒng)中的數(shù) 據(jù)一致性和完整性,也還要盡可能地降低數(shù)據(jù)的冗余。因此,在本軟件系統(tǒng)的數(shù)據(jù)庫設計 時必須要遵守如下的幾個通用的原則之外,也還需要根據(jù)木軟件系統(tǒng)的應用特殊性,遵守 和滿足其它方面的原則和要求。(1) 數(shù)據(jù)庫的設計應與信息模型完全相符,并充分考慮系統(tǒng)的可擴展性和可移植性;在數(shù) 據(jù)庫表結構設計屮應盡量滿足數(shù)據(jù)庫設計第三范式的要求,不能達到的應有充分的理由并 以文檔形式與數(shù)據(jù)字典一起保存。(2) 數(shù)據(jù)庫便于管理和保證數(shù)據(jù)的安全、實現(xiàn)數(shù)據(jù)庫設計的相對物理獨立性。(3) 對數(shù)據(jù)庫的各類操作應具有統(tǒng)一的管理和控制功能、并設置不同的權限。之所以耍遵守相關的
11、設計原則,主要是因為系統(tǒng)數(shù)據(jù)庫結構設計的優(yōu)劣,不僅直接影 響到整個軟件系統(tǒng)的性能,也還對數(shù)據(jù)庫管理系統(tǒng)應用的安全性、操作方便及故障恢復、 性能和可靠等方面也有一定的影響。2.1.1遵守項目組所制定出的命名規(guī)范盡管不同的數(shù)據(jù)庫系統(tǒng)產(chǎn)品對其屮的數(shù)據(jù)庫對象的命名有不同的要求形式,但也都遵 守一些通用的規(guī)則和要求。在木軟件系統(tǒng)項目中的數(shù)據(jù)庫相關的各種對象的命名、后臺程 序代碼的編寫等方面都應采用大小寫敏感的“見名知意”的名詞短語形式進行定義,每個 名詞短語的首字母都應該大寫、其后的每個單詞的首字母也都應該采用大寫的“駝峰制” 形式。各種對象的命名長度不要超過30個字符,這樣便于軟件應用系統(tǒng)能夠適應不同
12、的數(shù)據(jù) 庫系統(tǒng)。2.1.2遵守范式標準和合理地數(shù)據(jù)冗余1、理解和明確三個范式的基本含義和要求在數(shù)據(jù)庫系統(tǒng)設計中,各個數(shù)據(jù)庫表的結構設計應該要遵守和滿足三個范式的基木要 求,各個范式的基本含義和要求如下:1)第一范式1nf它是對數(shù)據(jù)庫表的原子性約束,要求數(shù)據(jù)庫表中的各個字段應具 有原子性,并不可再分解。2)第二范式2nf它是對數(shù)據(jù)庫表中的數(shù)據(jù)記錄的唯一性的約束要求,要求數(shù)據(jù)庫 表中的各個記錄的數(shù)據(jù)值要有唯一的標識,即數(shù)據(jù)庫表和對應的實體的唯一性。3)第三范式:3nf是對字段冗余性的約束,即任何字段不能由其他字段派生岀來,它 耍求字段沒有冗余。在設計基本數(shù)據(jù)庫表及其字段之間的關系,應盡量滿足第三范
13、式從而減少數(shù)據(jù)的冗余。 但是,滿足第三范式的數(shù)據(jù)庫設計,往往不是最好的系統(tǒng)設計。因此,為了提高數(shù)據(jù)庫系 統(tǒng)的運行效率,常常需要降低數(shù)據(jù)庫系統(tǒng)所要遵守的范式標準:適當增加數(shù)據(jù)冗余,而達 到以空間換時間的目的。2、適當增加冗余,達到以空間換時間的目的比如,在本軟件系統(tǒng)中的“課件信息”的基本數(shù)據(jù)庫表屮添加有“購買總金額”這個 字段,該字段的存在將會導致該“課件信息”數(shù)據(jù)庫表的設計結果不滿足第三范式一一因 為“購買總金額”可以由“單價”乘以“數(shù)量”得到,說明“購買總金額”是冗余字段。 但是,增加“購買總金額”這個冗余字段,卻可以提高對“課件信息”查詢統(tǒng)計的速度, 這就是以空間換時間的作法。因此,在數(shù)據(jù)
14、庫表設計中,應該要區(qū)分“數(shù)據(jù)列”和“計算列”兩者的不同。課件信 息的基本數(shù)據(jù)庫表屮的“購買總金額”這個字段其實是“計算列”,而“單價”和“數(shù)量” 這樣的字段是“數(shù)據(jù)列”。在數(shù)據(jù)庫表結構設計中,可以允許“計算列”的冗余字段,而 不允許存在“數(shù)據(jù)列”的兀余字段。3、把握“列變行”的技術應用所謂的“列變行”技術就是在數(shù)據(jù)庫表結構設計中,將主數(shù)據(jù)庫表中的一部分字段內(nèi) 容移出到單獨建立的子數(shù)據(jù)庫表屮。只有數(shù)據(jù)庫表屮的字段個數(shù)少了,才能保證在數(shù)據(jù)庫 表中不存在數(shù)據(jù)重復、口很少有數(shù)據(jù)冗余一一在數(shù)據(jù)冗余和處理速度之間找到合適的平衡 點。2.1.3保證數(shù)據(jù)的完整性和一致性1、合理的數(shù)據(jù)冗余也是必要的為了保證數(shù)據(jù)
15、庫表中的數(shù)據(jù)的一致性,設計人員遵守數(shù)據(jù)庫設計的范式,而導致設計 人員往往會設計過多的表間關聯(lián)(relation)也就是在設計過程中,采用盡可能降低數(shù) 據(jù)庫系統(tǒng)數(shù)據(jù)冗余的設計方案。但由于數(shù)據(jù)庫表間的關聯(lián)是一種強制性措施,一旦建立后, 對父表(parent table)和子表(child table)的數(shù)據(jù)插入、更新、刪除等功能性操作均要占 用數(shù)據(jù)庫系統(tǒng)的開銷。(1) 降低數(shù)據(jù)庫表中的數(shù)據(jù)冗余的優(yōu)點如果數(shù)據(jù)庫表中的數(shù)據(jù)冗余低,則對應的數(shù)據(jù)的完整性也就更容易得到保證,但增加 了數(shù)據(jù)庫表間連接查詢操作的次數(shù)一一對丁多數(shù)據(jù)庫表之間的關聯(lián)查詢尤其是大數(shù)據(jù)庫表 的查詢功能,其性能不僅將會降低,而且也提高了數(shù)
16、據(jù)庫系統(tǒng)客戶端程序的編程實現(xiàn)的難 度。因此,為了能夠提高數(shù)據(jù)庫系統(tǒng)的響應性能,合理的數(shù)據(jù)冗余有時也是必要的。因為 滿足第三范式的數(shù)據(jù)庫表設計,往往不是最好的設計方案。為了提高數(shù)據(jù)庫系統(tǒng)的運行效 率,在實際應用系統(tǒng)中常常需要降低所耍遵守的范式標準一一適當增加數(shù)據(jù)的冗余,達到 以空間換時間的fi的。(2) 在本軟件系統(tǒng)項目中對于查詢性能要求高的數(shù)據(jù)庫表應用數(shù)據(jù)冗余設計方案為此,可以根據(jù)業(yè)務規(guī)則并確定對關聯(lián)表的數(shù)據(jù)量大小、數(shù)據(jù)項的訪問頻度、訪問的 性能要求等應用的環(huán)境要求,對于查詢性能要求高的數(shù)據(jù)庫表要應用數(shù)據(jù)冗余的設計方案 冗余的好處就是獲取信息容易,不過也容易造成信息同步的消耗。2、如何實現(xiàn)和保
17、證軟件系統(tǒng)中的數(shù)據(jù)庫的完整性(1) 什么是數(shù)據(jù)庫完整性設計數(shù)據(jù)庫完整性(database integrity)是指數(shù)據(jù)庫中的數(shù)據(jù)在邏輯上的一致性、正確性、 有效性和相容性。數(shù)據(jù)庫完整性是由各種各樣的完整性的約束來保證,因此可以說數(shù)據(jù)庫 完整性設計其實就是數(shù)據(jù)庫完整性約束的設計。(2) 如何實現(xiàn)和保證數(shù)據(jù)庫的完整性數(shù)據(jù)庫完整性約束可以通過dbms或應用程序兩種不同的實現(xiàn)方式來實現(xiàn),基于 dbms的完整性約束最終是作為模式的一部分存入數(shù)據(jù)庫系統(tǒng)中,而由應用軟件本身實現(xiàn) 的數(shù)據(jù)庫完整性檢查是通過相關的程序代碼來實現(xiàn)。3、均衡考慮對數(shù)據(jù)的完整性和一致性的檢查(1)約束定義關于數(shù)據(jù)列中允許值的規(guī)則,是強
18、制完整性的標準機制約束可以是數(shù)據(jù)列約束或數(shù)據(jù)庫表約束,而列約束被指定為列定義的一部分,并且僅 適用于那個數(shù)據(jù)列;數(shù)據(jù)庫表約束的聲明與數(shù)據(jù)列的定義無關,可以適用于數(shù)據(jù)庫表中的 一個以上的列。如下為常見的約束定義:not null指定不接受null值的數(shù)據(jù)列;check約束對可以放入數(shù)據(jù)列中的值進行限制,以強制執(zhí)行域的完整性;unique約束實現(xiàn)唯一性約束;primary key約束標識列或列集,這些數(shù)據(jù)列或列集的值唯一地標識數(shù)據(jù)庫表中的 各個數(shù)據(jù)行;foreign key約束標識數(shù)據(jù)庫表之間的關系,一個數(shù)據(jù)庫表的外鍵指向另一個數(shù)據(jù)庫 表的候選鍵。(2)均衡考慮對數(shù)據(jù)的完整性和一致性的檢查使用約束
19、(check)可以防止由于系統(tǒng)用戶在對系統(tǒng)進行操作時的各種可能的誤輸入而 可能造成數(shù)據(jù)的錯誤,也是數(shù)據(jù)庫設計人員常用的一種技術手段。但是,不必要的約束也 會占用數(shù)據(jù)庫系統(tǒng)的開銷。因此,在數(shù)據(jù)庫表結構設計階段,應根據(jù)軟件系統(tǒng)操作的類型、頻度加以均衡考慮對 數(shù)據(jù)的完整性和一致性的檢查要求以進一步提高對數(shù)據(jù)庫表中數(shù)據(jù)的訪問性能。2.1.4主鍵定義及主鍵值的合理設置1、盡可能使用自然鍵值,不使用業(yè)務鍵值在本軟件系統(tǒng)的數(shù)據(jù)庫表的主鍵選擇方面,應該要盡可能使用自然鍵值,而不要使用 業(yè)務鍵值,以方便應對業(yè)務鍵的變化;表中的主鍵最好設計成單一主鍵,盡量不用復合主 鍵;關聯(lián)數(shù)據(jù)庫表之間還應該有外鍵約束的定義。復
20、合主鍵的字段個數(shù)越少,不僅提高了數(shù)據(jù)庫系統(tǒng)的運行效率,而且也還能夠節(jié)省數(shù) 據(jù)庫系統(tǒng)的索引存儲空間。2、合理地設置數(shù)據(jù)庫表的主鍵值在數(shù)據(jù)庫表設計中涉及主鍵值的設定,目前主要有由數(shù)據(jù)庫系統(tǒng)自動生成、自定義主 鍵值、guid等三種方式。1)系統(tǒng)自動生成主鍵值主要就是利用物理數(shù)據(jù)庫系統(tǒng)如mysql的自增型(auto_incwmen)的數(shù)據(jù)字段作為主 鍵字段的值,這種方式實現(xiàn)最簡單(只需在建立數(shù)據(jù)庫表時聲明自增屬性即可),但問題 也很多。比如,不能自設值、數(shù)據(jù)庫移植、恢復、合并等情況下都會出現(xiàn)問題。比如,軟件系統(tǒng)的數(shù)據(jù)庫原來使用mysql,后來要求把數(shù)據(jù)庫系統(tǒng)替換為ms sqlserver類型。此時就可
21、能會出現(xiàn)問題:原來自增字段的主鍵會被自動重新從1開始賦 值,但如果此數(shù)據(jù)庫表和其他的數(shù)據(jù)庫表有關聯(lián),另一個數(shù)據(jù)庫表的外鍵值就可能不再與 這個自增的主鍵值保持一致性。另外,在分布式數(shù)據(jù)庫系統(tǒng)中,不同數(shù)據(jù)庫的同名的數(shù)據(jù)庫表中的數(shù)據(jù)可能需要進行 同步復制、合并等功能操作。一個數(shù)據(jù)庫表的自增量的主鍵值,就很有可能與另一個數(shù)據(jù) 庫相同表的白增量值出現(xiàn)重復。2) 自定義主鍵值是指利用一定的規(guī)則編碼生成主鍵值,比如“時間+自定義序列”。這種方式雖然能夠 完全控制主鍵值的生成,但效率不高,通用性差,校驗時只能靠程序代碼。3) guid (global unique identifier)全局唯一標識符guid
22、值具有唯一性(其實現(xiàn)的算法一般是通過以太網(wǎng)卡地址、納秒級時間、芯片id 碼和許多可能的數(shù)字生成)、易產(chǎn)生和可以方便的生成等方面的特性,給應用程序處理帶 來了諸多方便。雖然執(zhí)行效率不如自增型的字段一一生成的id值比較長,占用的數(shù)據(jù)庫表 空間相應的也比較多,,但與其所表現(xiàn)出的優(yōu)點比起來,這點損失可以忽略不計。綜合上述幾種方式的特點以及系統(tǒng)的要求,在本軟件系統(tǒng)的數(shù)據(jù)庫表設計時對主鍵值 的生成采用guid方式。2.1. 5在基本數(shù)據(jù)庫表的基礎上可以創(chuàng)建出中間表和臨時表在項目的功能實現(xiàn)中,為了能夠提高數(shù)據(jù)訪問的安全性、方便性和快速性,可以在基本 數(shù)據(jù)庫表的基礎上創(chuàng)建出中間數(shù)據(jù)庫表和臨吋數(shù)據(jù)庫表。但要正確
23、地理解基本數(shù)據(jù)庫表與 中間數(shù)據(jù)庫表、臨時數(shù)據(jù)庫表之間所存在的木質不同。1、理解基本數(shù)據(jù)庫表所具有的如下四個特性(1) 原子性基本數(shù)據(jù)庫表中的各個字段是不可再分解的。(2) 原始性基本數(shù)據(jù)庫表中的各個記錄數(shù)據(jù)都是原始的數(shù)據(jù)(基礎性的數(shù)據(jù))的記錄。(3) 演繹性由基木數(shù)據(jù)庫表可以派生出中間數(shù)據(jù)庫表、臨時數(shù)據(jù)庫表。(4) 穩(wěn)定性基本數(shù)據(jù)庫表的數(shù)據(jù)結構是相對穩(wěn)定的,數(shù)據(jù)庫表中的數(shù)據(jù)記錄值一般都是需要長期 保存的。2、理解中間數(shù)據(jù)庫表的主要作用中間數(shù)據(jù)庫表一般是用于存放統(tǒng)計數(shù)據(jù)的數(shù)據(jù)庫表,它是為軟件系統(tǒng)輸出報表或查詢 結果而設計的。中間數(shù)據(jù)庫表可以沒有主鍵與外鍵,并由開發(fā)人員自己在程序代碼中自動 維護。
24、3、理解臨時數(shù)據(jù)庫表的主要作用臨吋數(shù)據(jù)庫表是開發(fā)人員根據(jù)程序實現(xiàn)的需要而設計的,一般用于存放臨吋數(shù)據(jù),并 為程序模塊所用。每個臨時表的牛存期都是在自己的connection/session中,不同連接間看 不到對方的臨時表、臨時表會在連接斷開時自動被drop掉。因此,同一時間有多個人并發(fā) 操作時,臨時表里的數(shù)據(jù)不會丟失。但因為臨時表是在數(shù)據(jù)庫連接時創(chuàng)建和連接斷開時釋放的,而冃前基本上都是數(shù)據(jù)庫 連接池(connection poo 1),很容易岀現(xiàn)數(shù)據(jù)混亂;另外,每次創(chuàng)建和刪除臨吋數(shù)據(jù)庫表, 也還存在一定的系統(tǒng)開銷。2.1.6將多對多的關系轉換為一對多的關系1、盡可能消除數(shù)據(jù)庫表之間的多對多的
25、關系若兩個實體之間存在多對多的關系,則對應的兩個數(shù)據(jù)庫表之間則會存在多對多的關 系。在數(shù)據(jù)庫表的關系設計中,應盡可能消除這種關系復雜的“多對多”關系。而消除的 具體辦法是在兩個實體之間增加第三個實體一一為中間關聯(lián)實體。因此,原來一個“多對多”的關系,現(xiàn)在轉變?yōu)閮蓚€“一對多”的關系。但要將原來 兩個實體的屬性合理地分配到第三個實體中去,一般都是將關系兩端實體的主鍵作為中間 關系數(shù)據(jù)庫表的主鍵,再加上關系本身所需要的屬性字段。2、示例說明在系統(tǒng)中存在有“學生信息表”與“選課信息表”兩張不同的數(shù)據(jù)庫表,它們之間存 在多對多的關系一一也就是一個學生可以選擇多門培訓課程,而一門培訓課程當然可以被 多個不
26、同的學生選修和學習??梢栽跀?shù)據(jù)庫系統(tǒng)中新增加一個“學生選課情況信息表”,在該數(shù)據(jù)庫表中包含有2 個字段(學生編號、培訓課程編號)。此時,“學生信息表”與“學生選課情況信息表” 為一對多關系;而“選課信息表”與“學生選課情況信息表”也為一對多的關系。2. 2 數(shù)據(jù)庫系統(tǒng)安全性設計數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫系統(tǒng)以防止不合法的使用所造成的數(shù)據(jù)泄露、更改或 破壞。由于在數(shù)據(jù)庫系統(tǒng)中集中存儲有人量的數(shù)據(jù),而口為許多用戶直接共享和使用,從 而使得數(shù)據(jù)庫系統(tǒng)的安全性問題更為突出。數(shù)據(jù)庫系統(tǒng)的完整性約束可以避免對數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)的無意濫用,而良好的數(shù)據(jù)庫系 統(tǒng)安全性則可以避免對數(shù)據(jù)的惡意濫用。為了防止對數(shù)據(jù)庫
27、數(shù)據(jù)的惡意濫用,可以在不同 的安全級別上設置各種安全措施一一數(shù)據(jù)庫系統(tǒng)的安全保護措施是否有效是數(shù)據(jù)庫系統(tǒng)的 主要指標之一。數(shù)據(jù)庫系統(tǒng)是整個軟件系統(tǒng)的核心系統(tǒng),數(shù)據(jù)庫系統(tǒng)的故障將會導致整個軟件系統(tǒng)的 停用,所以不僅要保證其可靠性,同時也需要在安全性方面采取相關的技術措施。本軟件 系統(tǒng)的數(shù)據(jù)庫系統(tǒng)在安全性方面擬將采用如下的各個技術措施。2. 2.1數(shù)據(jù)庫表數(shù)據(jù)訪問的安全保密設計1、數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)不允許用戶直接訪問根據(jù)軟件系統(tǒng)的業(yè)務流程,不同的用戶將擁有對于數(shù)據(jù)庫表中數(shù)據(jù)的不同操作訪問的 權限。并且數(shù)據(jù)庫表中的數(shù)據(jù)只能由服務器端相關的程序連接和操作訪問,而不允許客戶 端的相關程序繞過web服務器
28、肓接連接數(shù)據(jù)庫系統(tǒng)。2、所有的數(shù)據(jù)訪問必須要擁有相關的權限對數(shù)據(jù)庫表中的數(shù)據(jù)所進行的“增、刪、改、查”方面的功能操作必須耍具有相應的 功能操作權限才能進行,而連接數(shù)據(jù)庫系統(tǒng)也必須要提供安全的用戶名/密碼組合方式登錄 數(shù)據(jù)庫系統(tǒng)一一本軟件系統(tǒng)的jdbc數(shù)據(jù)庫連接程序不應該使用數(shù)據(jù)庫系統(tǒng)的管理員賬號 (如mysql的root賬號或者oracle中的sys賬號等)連接數(shù)據(jù)庫系統(tǒng)以提高數(shù)據(jù)庫系統(tǒng) 數(shù)據(jù)訪問的安全性,而應該由數(shù)據(jù)庫系統(tǒng)管理員提供一個具體賬號。系統(tǒng)數(shù)據(jù)庫數(shù)據(jù)的泄露常常發(fā)生在系統(tǒng)內(nèi)部,大量的系統(tǒng)運維人員能夠直接接觸系統(tǒng) 數(shù)據(jù)庫表中敏感的數(shù)據(jù),而傳統(tǒng)以“防外為主”的數(shù)據(jù)庫系統(tǒng)訪問安全解決方案失
29、去了用武之地。2. 2.2數(shù)據(jù)訪問必須要進行身份驗證1、使用sql身份驗證應遵循的基本原則不要將數(shù)據(jù)庫系統(tǒng)內(nèi)置的系統(tǒng)管理員賬號(如mysql數(shù)據(jù)庫系統(tǒng)的root賬號)用于系 統(tǒng)程序中的數(shù)據(jù)訪問。應用程序應該通過使用最低特權賬戶來連接和訪問數(shù)據(jù)庫系統(tǒng)。2、使用具有最少權限的賬戶連接到數(shù)據(jù)庫系統(tǒng)必須要保護sql連接字符串(它包含憑據(jù)),并要求使用sql身份驗證和創(chuàng)建出一 個只能通過存儲過程訪問該數(shù)據(jù)庫的用戶。2. 2.3遵守最少權限的角色分配原則 1、明確數(shù)據(jù)對象的類型和操作權限之間的關系數(shù)據(jù)對象操作權限表、視圖、列(table)select、insert、update> delete基本表
30、(table)alter> index數(shù)據(jù)庫(database)create table數(shù)據(jù)庫系統(tǒng)create database因此,有必要根據(jù)應用的業(yè)務邏輯要求在數(shù)據(jù)庫系統(tǒng)中為用戶或者角色設置最少權限, 除去無關和不必要的數(shù)據(jù)庫數(shù)據(jù)訪問權限、特別是對數(shù)據(jù)庫表的修改和刪除操作。2、熟悉授權(grant) sql語句的基本格式grant權限1,權限2, on對彖類型對彖名稱to用戶1,用戶2, with grant option上面的grant語句的主要功能是實現(xiàn)將指定的數(shù)據(jù)對象的指定權限授予指定的用戶, 其中的“with grant option”選項的主要作用是允許獲得指定權限的用戶把
31、權限再授 予其他用戶。下面的示例是實現(xiàn)把對用戶信息數(shù)據(jù)庫表(userinfo)中的“姓名”字段的修改、查詢 表的權限授予用戶user的sql語句:grant updat玖姓名),select on table userinfo to user;2. 2.4防范sql注入攻擊由于sql注入攻擊是從正常的www端口訪問,而口表面看起來跟一般的web頁面 訪問并沒有什么不同,所以市面上的防火墻都不會對sql注入發(fā)出警報,sql注入攻擊往 往是通過應用程序觸發(fā)。1、什么是sql注入攻擊sql注入是口前比較常見的針對數(shù)據(jù)庫的一種攻擊方式,在這種攻擊方式屮,攻擊者 會將一些惡意的sql代碼插入到sql字符
32、串中,然后通過各種手段將該字符串傳遞到數(shù) 據(jù)庫系統(tǒng)中執(zhí)行。2、sql注入攻擊的基本原理sql注入過程的工作方式是提前終止正常的sql文本字符串,然后追加一個新的命令。 為此,攻擊者會在用戶輸入變量時,先用一個單引號和分號(:)結束當前的sql語句。 然后再插入一個惡意的sql語句并用注釋標記終止所注入的sql字符串一一而執(zhí)行 時,數(shù)據(jù)庫系統(tǒng)會認為此后的語句為注釋,故后續(xù)的sql文木字符串將被忽略和不被編譯 與執(zhí)行。3、sql注入攻擊的防范(1)數(shù)據(jù)庫操作訪問程序代碼屮的sql語句要盡量避免使用字符串拼接的形式,強烈建 議使用查詢參數(shù)化(綁定變量)的方法進行查詢;因為參數(shù)化的語句使用參數(shù)而不是將
33、用戶輸入的變量宜接嵌入到目標sql語句中,采 用這種措施,可以杜絕大部分的sql注入式攻擊。(2)數(shù)據(jù)庫訪問的用戶應遵循“最小權限”原則,盡可能在數(shù)據(jù)庫系統(tǒng)中除掉與軟件系統(tǒng) 所不需要的權限一一在jdbc的數(shù)據(jù)庫連接中,不應該采用數(shù)據(jù)庫系統(tǒng)的dba賬號(如 mysql數(shù)據(jù)庫系統(tǒng)的root賬號)連接數(shù)據(jù)庫系統(tǒng),而應該是普通的用戶賬號一一該賬號所 對應的數(shù)據(jù)庫系統(tǒng)的訪問權限不能夠執(zhí)行drop table等語句,以最大限度地減少注入式攻 擊對數(shù)據(jù)庫帶來的危害;(3)不信任任何用戶提交的數(shù)據(jù),并對請求提交的數(shù)據(jù)進行檢測和過濾一一比如在web 表現(xiàn)層對表單數(shù)據(jù)進行檢查、在數(shù)據(jù)訪問層對獲得的參數(shù)值進行檢查。
34、比如,可以測試字 符串變量的內(nèi)容,只接受滿足格式要求的值而拒絕包含有二進制數(shù)據(jù)、轉義序列、分號和 注釋字符的輸入內(nèi)容。因為分號分隔符是sql注入式攻擊的主要幫兇,而注釋分隔符只有在數(shù)據(jù)庫表創(chuàng)建時需要應用,在查詢語句中沒有必要添加注釋的內(nèi)容,因此完全可以把它們過濾和拒絕掉。2. 2. 5充分應用視圖技術提高數(shù)據(jù)庫系統(tǒng)安全性在數(shù)據(jù)庫系統(tǒng)設計中,可以為不同角色的用戶定義出不同的視圖,通過視圖機制把要 保密的數(shù)據(jù)對無權操作的用戶隱藏起來,從而自動地對數(shù)據(jù)提供一定程度的安全保護。而 且由于對視圖也可以進行相關的授權和控制,因此充分地應用視圖機制,不僅可以使數(shù)據(jù) 庫系統(tǒng)具有數(shù)據(jù)安全性、數(shù)據(jù)邏輯獨立性和操作
35、簡便等優(yōu)點。1、應用視圖技術可以簡化復雜的多表z間的數(shù)據(jù)關系與基本數(shù)據(jù)庫表不同,視圖是一種虛表一一它依賴數(shù)據(jù)源的實表而存在。視圖是供程 序員使用數(shù)據(jù)庫的一個窗口,是基表數(shù)據(jù)綜合的一種形式,是數(shù)據(jù)處理的一種方法,是用 戶數(shù)據(jù)保密的一種手段。在本軟件系統(tǒng)中應該要合理地應用視圖技術以簡化復雜的數(shù)據(jù)庫 表中的數(shù)據(jù)訪問的編程實現(xiàn)。2、視圖的定義深度一般不要超過三層為了能夠進行復雜處理、提高運算速度和節(jié)省存儲空間,視圖的定義深度一般不得超 過三層。若三層視圖仍不夠用,則應在視圖上定義臨時表,在臨時表上再定義視圖。這樣 反復交迭定義,視圖的深度就不受限制了 一一但最好還是遵守視圖的定義深度一般不得超 過三層
36、的基本耍求。3、應用視圖技術提高數(shù)據(jù)訪問的安全性為了提高對軟件系統(tǒng)中某些核心的數(shù)據(jù)庫表操作的安全性,可以在基本數(shù)據(jù)庫表上建 立出第一層次的視圖,而且這層次視圖的個數(shù)和數(shù)據(jù)結構,都與基木數(shù)據(jù)庫表的個數(shù)和數(shù) 據(jù)結構是完全相同的。系統(tǒng)中的一般用戶一律只準通過視圖實現(xiàn)對目標數(shù)據(jù)庫表的操作, 而只有數(shù)據(jù)庫管理員才能直接在基本數(shù)據(jù)庫表上進行修改和刪除等功能操作。2. 2.6對敏感數(shù)據(jù)的訪問需要應用審計功能 1、什么是數(shù)據(jù)庫系統(tǒng)的安全審計數(shù)據(jù)庫系統(tǒng)的審計功能是指在用戶對數(shù)據(jù)庫執(zhí)行操作的同時把所有操作自動記錄到數(shù) 據(jù)庫系統(tǒng)的審計口志屮。而利用數(shù)據(jù)庫系統(tǒng)的審計功能,數(shù)據(jù)庫系統(tǒng)管理員(dba)可以 根據(jù)審計跟蹤的
37、結果信息,重現(xiàn)導致數(shù)據(jù)庫系統(tǒng)現(xiàn)有狀況的一系列事件,從而找岀非法存 取數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)的人、時間和內(nèi)容等信息一一方便日后進行查詢、分析、過濾等功能操 作,最終實現(xiàn)對目標數(shù)據(jù)庫系統(tǒng)的用戶操作的監(jiān)控和審計。2、對數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)的危險性訪問必須要進行審計在本軟件系統(tǒng)的數(shù)據(jù)庫訪問操作中,對數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)的危險性訪問操作必須要進行 審計一一比如,對ddl類操作、dml類操作都必須要進行審計。審計規(guī)則的審計耍素應 該包括有如下的信息:用戶、源ip地址、操作時間、使用的sql操作類型(delete、drop、 update 等 sql 語句)。2. 3數(shù)據(jù)庫系統(tǒng)的性能優(yōu)化設計要提高軟件系統(tǒng)中的數(shù)據(jù)庫系統(tǒng)的運行效
38、率和性能,必須要從數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫設 計、程序實現(xiàn)等多個不同的方面進行綜合優(yōu)化。在本軟件系統(tǒng)中,可以對數(shù)據(jù)庫系統(tǒng)采取 如下的優(yōu)化措施。2. 3.1盡可能提高數(shù)據(jù)庫系統(tǒng)的運行效率1、在數(shù)據(jù)庫物理設計時,降低范式,增加冗余,少用觸發(fā)器和盡可能多用存儲過程減少被頻繁訪問的核心數(shù)據(jù)庫表的數(shù)量,并在這些核心數(shù)據(jù)庫表上創(chuàng)建和優(yōu)化索引。 存儲過程不僅可以重用,而且也大大地減少了數(shù)據(jù)庫系統(tǒng)客戶端程序遠程連接和訪問數(shù)據(jù) 庫系統(tǒng)的次數(shù),從而能夠提高系統(tǒng)的整體性能。2、水平分割和垂直分割數(shù)據(jù)庫表如果發(fā)現(xiàn)某個數(shù)據(jù)庫表中存儲的數(shù)據(jù)記錄太多(例如超過一千萬條),則要對該數(shù)據(jù) 庫表進行水平分割一一以該表主鍵pk的某個值為
39、界線,將該表的數(shù)據(jù)記錄水平分割為兩 個不同的數(shù)據(jù)庫表。但若發(fā)現(xiàn)某個數(shù)據(jù)庫表中的字段太多(例如超過八十個),則要垂直 分割該數(shù)據(jù)庫表,將原來的一個數(shù)據(jù)庫表分解為兩個不同的數(shù)據(jù)庫表。3、對數(shù)據(jù)庫管理系統(tǒng)進行系統(tǒng)優(yōu)化優(yōu)化數(shù)據(jù)庫管理系統(tǒng)中的各種系統(tǒng)工作參數(shù),如緩沖區(qū)個數(shù)、應用索引技術等。4、優(yōu)化sql語句和優(yōu)化事務處理(1)盡量減少對數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)查詢的次數(shù)和在服務器與客戶端網(wǎng)絡傳輸?shù)臄?shù)據(jù)量開發(fā)人員在使用sql時往往會陷入一個誤區(qū),即太關注于所得的結果是否正確,而忽 略了不同的實現(xiàn)方法之間可能存在的性能差界。但由于sql語句是獨立于程序設計邏輯, 因此對sql語句進行優(yōu)化不會影響程序邏輯一一sql語句有不同的寫法,但在性能上的差 異非常大。(2)不要在事務執(zhí)行中進行大量計算或者與用戶交互的操作,因為在事務的執(zhí)行過程中不 允許被打斷。因此,事務處理的過程應該盡量短小、盡量避免事務。長事務會鎖住很多系 統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學原料的環(huán)保合成方法優(yōu)化研究進展分析預測考核試卷
- 機器人服務創(chuàng)新模式與實踐案例考核試卷
- 景區(qū)旅游信息化平臺運營與管理考核試卷
- 制作氣球培訓課件
- 家電公司轉讓合同范本
- 委托汽車融資合同范本
- 正規(guī)吊車租賃合同范本
- 圍墻制作安裝合同范本
- 項目建設策劃合同范本
- 酒店餐飲服務流程優(yōu)化與提升制度
- 長安逸動說明書
- 《憲法學》2023-2024期末試題及答案(試卷號2106)
- 遼寧省沈陽市名校2024屆中考數(shù)學全真模擬試題含解析
- 一崗雙責評價細則范本
- 醫(yī)院培訓課件:《手術安全核查制度》
- 南陽醫(yī)專緩交學費申請表
- 衛(wèi)生部病歷質量評價標準
- 乘坐地鐵安全指南(課件)-小學生主題班會通用版
- GB/T 17421.2-2023機床檢驗通則第2部分:數(shù)控軸線的定位精度和重復定位精度的確定
- 重慶市渝北區(qū)大灣鎮(zhèn)招錄村綜合服務專干模擬預測(共500題)筆試參考題庫+答案詳解
- 矢量分析和場論基礎
評論
0/150
提交評論