- 數據庫安全性
論述題5’ | |
編程題10’ | sql語言實現權限控制 |
一、概述
1、不安全因素
(1)?授權對數據庫的惡意存取和破壞
(2)數據庫中重要的數據泄露
(3)安全環境的脆弱性
2、?主存取控制?法
grant <權限> on table <表名> to <?戶>
revoke <權限> on table <表名> from <?戶>
二、安全性控制
1、數據庫安全性控制
(1)、?戶身份鑒別
靜態?令鑒別、動態?令鑒別、?物特征鑒別、智能卡鑒別
- 、存取控制
組成結構:定義用戶權限+合法權限檢查
(3)、?主存取控制?法(重點講解);
1)定義:數據擁有者決定哪些用戶可以訪問該數據
2)基本原理: 主體S,客體O,訪問權限R,關系D
①核心:主體S是否對客體O擁有正確的訪問權限R
②如果主體S對客體O有權限R,(S,O,R)在D中;
否則,如果S沒有對客體O的權限R, (S,O,R)不在D中
3)通過grant語句 和revoke語句來進?控制
4)由用戶權限構成: 數據庫對象 和 操作權限
5)DS定義:對存取權限的定義 稱為授權
關系數據庫系統中存取控制對象,主要存取權限:
(4)、授權 Grant
Grant <權限> 【on 表名[(列名)] 】to ?戶 【With grant option】;
1)授權命令:由數據庫管理員將對指定操作對象的指定操作權限授予指定的用戶。
2)With grant option:若給?戶分配權限時帶With grant option?句,則普通?戶獲權后,可把??的權限授予其他?戶。否則,不能傳播。
注:不允許循環授權
3)附加:
全部權限: all?priviliges
所有用戶: ?public
修改學生學號的權限:UPDATE(Sno)
(5)、回收 revoke
?REVOKE <權限> (屬性)?【ON <數據對象> 】 FROM <?戶名> ?【cascade】
1)授予的權限:由DBA或其他授權者用REVOKE語句收回
2)級聯CASCADE語句:
將用戶U5的INSERT權限收回的時候必須使用級聯CASCADE語句,否則拒絕執行。如果U6或U7還有從其他用戶處獲得對SC表的INSERT權限,則他們仍具有此權限,系統只收回直接或間接從U5處獲得的權限。
(6)、進行自主存取控制具體過程
1、用有權限的賬號登錄SSMS
兩種身份驗證模式:Windows身份驗證模式混合身份驗證模式
2、創建登錄賬號
create login 登錄賬號名with password='密碼'
3、創建數據庫用戶
create user 數據庫用戶名for login 登錄賬號名
- 授權
(7)、創建數據庫模式的權限/數據庫用戶
create?user?<username>[WITH][DBA | RESOURCE | CONNECT]
1)只有系統超級用戶才有權限創建數據庫用戶
2)數據庫用戶可有三種權限:CONNECT、RESOURCE和DBA(默認CONNECT權限)
- 數據庫??
數據庫角色:被命名的一組與數據庫操作相關的權限的集合
?(1)、??的創建:
?create role <??名>
(2)、??授權
?grant <權限> on <對象類型> 對象名 to <??1>,<??2>
(3)、把??授權個其他?戶或者??
?grant <??> to ??或者?戶名字 [with admin option]
若加上with admin option ,這個?戶還可以將這權限授予給其他??或者?戶
(4)、??權限的收回
revoke <權限> on <對象名> from ??名字
- 視圖機制
把要保密的數據對無權存取這些數據的用戶隱藏起來,對數據提供一定程度的安全保護
EX1、建立計算機系學生的視圖,把對該視圖的SELECT權限授于王平,把該視圖上的所有操作權限授于張明
1)先建立計算機系學生的視圖CS_Student
CREATE VIEW?CS_Student AS SELECT?* FROM Student WHERE?Sdept='CS';
2)在視圖上進一步定義存取權限
GRANT SELECT ON?view CS_Student TO 王平 ;
GRANT ALL?PRIVILIGES ON view CS_Student TO 張明;
- 審計
- 定義:跟蹤數據庫記錄和權限的使用監視,同時所有用戶對數據的操作并記錄到審計日志中SC數據的操作進?審計。
- audit語句:設置審計功能
- noaudit語句:取消審計功能
EX1、對修改SC表結構或修改SC表數據的操作進行審計
AUDIT ALTER,UPDATE ?ON??SC;
EX2、取消對SC表的一切審計
NOAUDIT ALTER,UPDATE ON SC;
- 數據加密
通過?些加密算法,把明?變成密?,這樣別?就?法查看
- 簡答題:
6.1、什么是數據庫的安全性?有哪些安全措施?
(1)數據庫的安全性是指☆☆
保護數據庫,防止非合法的使用,以免數據的泄漏、非法更改和破壞。
(2)數據庫安全性控制的方法☆☆
①用戶標識 系統鑒定:DBMS 都要提供一定的方式供用戶標識自己。在存取數據庫的數據前,用戶首先要自我標識,系統對用戶的標識迚行核定,通過鑒定后,才提供數據庫的使用權。常用的標識方法是用戶名和口令字。
②存取權限的控制:用戶被獲準使用數據庫后,還要根據預定的用戶權限迚行存取控制,如某個用戶只能讀哪些數據庫表,某個用戶只能寫哪些數據庫表等。
③數據加密:以密碼的方式存儲數據。
6.2、計算機系統的安全模型包括哪幾個部分
用戶 數據庫安全保護 操作系統 數據庫 及其操作圖
6.3、常用的用戶身份鑒別方法都有哪些?
靜態口令鑒別,動態口令鑒別,智能卡鑒別,生物特征鑒別
6.4、簡述強制存取控制的定義
強制存取控制是指系統為保證更高程度的安全性,
按照TDI/TCSEC標準中安全策略的要求所采取的強制存取檢查手段。
6.5、試述計算機系統的安全模型
應用層次 → 數據庫管理系統(DBMS)→操作系統(OS)→數據庫(DB) 用戶標識和鑒別 數據庫安全保護 安全保護 數據加密 視圖 日志 審計 存取控制(自主、強制) →層次越低,安全性越高
6.6簡述自主存取控制和強制存取控制的不同
1、在自主存取控制方法中,用戶對于不同的數據庫對象有不同的存取權限,不同的用戶對同一對象也有不同的權限,而且用戶還可將其擁有的存取權限轉售給其他用戶,因此自主存取控制非常靈活。
2、在強制存取控制方法中,每一個數據庫對象被標以一定的密級,每個用戶也被授予某一個級別的許可證,對于任意一個對象,只有具有合法許可證的用戶才可以存取。強制存取控制因此相對比較嚴格。
6.7、DBMS存取控制機制主要包括兩部分:
自主存取控制和強制存取控制
6.8在SQL語言中為了數據庫的安全性,設置了對數據的存取進行控制的語句對用戶授權使用 GRANT REVOKE語句收回所授的權限
6.9舉例說明對數據庫安全性產生威脅的因素。
(I) 非授權用戶對數據庫惡意存取和碳壞:惡意互聯網企業的軟件開發人員利用數據庫平臺軟件有漏河的函數將普通用戶權限提升為管理員權限,存取和刪改相應數據:
(2) 數據庫中重要或敏感數據被露:惡意金融企業的教件開發人員使用不合法的手段盜取其他金業數據庫中的企業運行的重要數據:
(3) 安全環境脆性:惡意入侵醫院 DBMS 者使用 MS-Excel等其他客戶端與醫院病人信息 DBMS 相連,破壞環境安全任,查看醫院病人的病歷,侵害相應病人的權益。
6.10什么是數據庫中的自主存取控制方法和強制存取控制方法?
(1) 數據庫中的自主存取控制方法:
用戶對不同數據庫對象以及不同用戶對同一對象存取權限不同,且用戶可將其擁有的存取權限轉授給其他用戶,非常靈活。
(2) 數據庫中的強制存取控制方法:
每個數據對象用某個密級標記,每個用戶用某個級別的許可證標記,僅具有合法許可證的用戶可存取任意對象,相對比較嚴格。
6.11解釋強制存取控制機制中主體、客體、敏感度標記的含義。
強制存取控制機制小主體、客體、領悠度標記的含義:
(I) 主體:系統中的活動實體,包括 DBMS 管理的實際用戶和代表用戶的各進程:
(2) 客體:系統中的被動實體,受主體操縱,包括文件、基本表、索引、祝圖等:
(3)敏感度標記:DBMS 為主體和客體的每個實例(值)指派一個敏感度標記,敏感性標記的密級次序 TS(絕率)>S(機密)>C(可信)>P(公開)。主體的敏感度標記稱為許可證級別,客體的敏感度標記稱為密級。
6.10舉例說明強制存取控制機制是如何確定主體能否存取客體的。
強制存取控制機制確定主體能否存取客體的舉例說明:
假設對關系 Teacher 進行 MAC,對控制存取的數據單元(元組》用密級標記,Teacher 元組密級如表4-6所示(4=絕密,3=機密,2=可信,1=公開)。
若用戶U1 和U2的許可證級別分別為4和1.則根據存取規期,U1能讀取元組 TI、T2、T3、T4,只能寫T4:U2火能讀取和寫元組Tl。
6.11什么是數據庫的審計功能,為什么要提供審計功能?
(I) 數據庫中的市計功能的定義:
審計功能是把用戶對數據庫的所有操作白動記錄 下來放入審計目志中,包括用戶級審計和系統級審計。
(2) 提供審計功能的原因:
①任何系統的安全保護措能都不是完美無缺的,盜意盜竊破壞數據的人總可能存在。審計員利用審計日志鑒控數據庫中各種行為,重現導致數據庫現有狀況的一系列事件,找出非法存取數據或豁意盜竊破壞數據的人、時間和內容等,保護系統安全:
②對審計日志分析,提前采取措施兆潛在成脅,保護系統安全。
- 數據庫完整性
論述題5 | |
編程題10 | 觸發器 |
- 完整性
1、數據庫的完整性是指:數據庫數據的正確性和相容性☆☆
2、正確性:指數據是符合現實世界語義,反映了當前實際狀況的
3、相容性:指數據庫同一對象在不同關系中的數據是符合邏輯的
4、簡述數據為什么要具有完整性和安全性?
數據的完整性:
防止數據庫中存在不符合語義的數據,也就是防止數據庫中存在不正確的數據
防范對象:不合語義的、不正確的數據
數據的安全性:
保護數據庫防止惡意的破壞和非法的存取
防范對象:非法用戶和非法操作
- 簡述數據庫的完整性的作用?
為了防止數據庫中存在不符合語義的數據,也就是防止數據庫中存在不正確的數據。
6、為維護DB的完整性,關系DMS具備的三個功能:☆☆
1、提供定義完整性約束條件的機制
①關系模型的完整性約束分類:實體完整性、參照完整性、用戶自定義完整性
②完整性約束實現方法:由SQL的DDL語句來實現,并存入數據字典
2、提供完整性檢查的方法
①完整性檢查:DBMS中檢查數據是否滿足完整性約束條件的機制
②檢查時機:INSERT、UPDATE、DELETE語句執行后,或事務提交時檢查
- 違約處理:
拒絕no?action、級聯cascade、設置為空set null
- 解答題:
- 數據庫的完整性概念與數據庫的安全性概念有什么區別和聯系?
- 區別:
- 聯系:兩者都是對數據庫進行規范和限制的,最終目的是保護數據庫。
- 什么是數據庫的完整性約束條件?
數據庫的完整性約束條件是指數據庫中的數據應該滿足的語義約束條件,表達給定的數據模型中數據及其聯系所具有的制約和依規則,限定符合數據模型的數據庫狀態以及狀態的變化,保證數據的正確、有效和相容。
- 關系數據庫管理系統在實現參照完整性時需要考慮哪些方面?
(1)修改關系的主碼值,只能先刪除元組,再把有新主碼值的元組桶入到關系中。著允許修改主碼,先保證主碼唯一性和非空,再區分參照關系和被參照關系:
(2) 外碼是否可以為空值:
(3)在參照關系中捅入元組時,系統可能采取受限插入和遞歸播入的方式:
(4)刪除核參照關系元組時,系統可能采取級聯刪除、受限刪除和置空值刪除的方式。
6.在關系系統中,當操作違反實體完整性、參照完整性和用戶定義的完整性約束條件時,一般是如何分別進行處理的?
(1)當操作違反實體完整性約束條件時,一般采用的方式是拒絕插入或修改;
(2) 當操作違反參照完整性約束條件時,一般采用的方式是拒絕執行、級聯操作、設置為空值;
(3)當操作違反用戶定義的完整性約束條件時,一般采用的方式是拒絕執行。
- 三大完整性
2.1、實體完整性:主碼唯?,且?空
1、定義:
CREATE TABLE中用primary?key定義
2、定義方法(兩種):
①列級約束②表級約束
注:對多個屬性構成的只能定義為表級約束
3、實體完整性規則:
①主碼值是否唯一,不唯一則拒絕insert或update
②主碼的各個屬性是否為NULL,有一個為空就拒絕insert或update
檢查記錄中主碼值是否唯一的方法:B+樹索引
2.2、參照完整性:外碼沒有、或者有且只有?個
1、參照完整性: ?
?foreign key?(參照關系屬性)references 表名(主鍵)
一個參照完整性將兩個表中相應元組聯系起來。
2、參照完整性違約處理:
(1)拒絕(no action)執行(默認)
(2)級聯(cascade)操作:
當刪除或修改被參照表的一個元組造成與參照表的不一致,則刪除或修改參照表中所造成不一致的元組
(3)設置為空值(set null):
當刪除或修改被參照表的一個元組造成與參照表的不一致,則對應屬性值為空
前提條件:該屬性允許空值
2.3、?戶定義完整性
1、屬性上的約束條件
(1)CREATE TABLE時定義
①列值非空(NOT NULL)
②列值唯一(UNIQUE)
③檢查列值是否滿足一個布爾表達式(CHECK( ))
(2)屬性上約束檢查時機:INSERT元組或UPDATE屬性的值時,RDBMS自動檢查
(3)違約處理:不滿足則拒絕執行
2、元組上的約束條件
在CREATE TABLE語句中可以用CHECK短語定義元組上的約束,
即元組級的限制同屬性值限制相比,元組級的限制可以設置不同屬性之間的取值
的相互約束元組級的限制(表級約束)可以設置不同屬性之間的取值的相互
約束條件
(1)?空
create table student(
no char(9) primary key,
age int?not null
);
(2)列值唯?
create table student(
no char(9) primary key,
age int unique
);
(3)滿?某?個條件表達式 check來寫
create table student(
no char(9) primary key,
sex char(2) check (sex in ('男','?')),
age int not null
);
2.4完整性約束命名子句constraint約束
constraint <完整性約束條件名>
[primary key短語
|foreign key短語
|check短語]
- 斷言
1、create assertion <斷?名> <check?句>
其中check字句 與where?句的表達式類似
2、刪除斷?名稱:
drop assertion 斷?名字;
- 觸發器
4.1定義:做 事件->條件->動作 規則.(ECA rule)
- 含義:當對?個表增、刪、改時候, 對觸發器??的條件進?檢查,如果成?,就執?觸發器??的動作.否則不執???的動作.
4.2 CREATE TRIGGER語法格式
CREATE TRIGGER <觸發器名>
{BEFORE(前)?| AFTER(后)} <觸發事件>?ON <表名>
FOR EACH {ROW | STATEMENT}
[WHEN <觸發條件>]
<觸發動作體>
- 觸發事件
①是INSERT、DELETE、UPDATE,也可以是幾個事件組合?
②UPDATE OF <觸發列,…>,進一步明確指出修改哪個列時觸發
BEFORE | AFTER是觸發的時機
前觸發 后觸發
(2)觸發器類型
①行級觸發器 (FOR EACH ROW)
②語句級觸發器(FOR EACH STATEMENT)(默認語句級觸發)
如果是語句級觸發器,執行完UPDATE語句后觸發動作體將執行一次
如果是行級觸發器,UPDATE 語句影響多少行,就觸發多少次,同時用戶在過程體中使用new或old語句引用update/insert事件之后的新值/之前的舊值。
4.3觸發器類型
1、DML觸發器
(1)含義:
當數據庫中發生數據操作語言 (DML) 事件時將調用 DML 觸發器
INSERT,DELETE, UPDATE
- 語句:
create trigger?觸發器名
of?屬性on?表名?[with encryption]
{for|after|instead of} +{[insert][,][update][,][update][,][delete]}
as
[begin]
[if update?(列名1) ]
sql_statements
[end]
- DDL觸發器
- 含義:
DDL事件由DDL語句中的關鍵字以及關鍵字之間的下劃線構成。
如:創建表事件為create_table
刪除表事件為drop_table
修改表事件為alter_table
刪除視圖事件為drop_view
-
觸發事件:
create?trigger?觸發器名
on {all server|database}
[with encryption]
{for|after}?{ DDL事件} [ ,...n ]
as
sql_statement
4.4刪除觸發器
DROP TRIGGER <觸發器名>?ON <表名>;
- 關系數據理論
應用題20‘ | 范式判斷并分解還原 |
- 引入范式原因
數據冗余、更新異常、插?異常、刪除異常
- 范式
1、某一關系模式R為第n范式,??可簡記為R∈nNF。
2、一個低一級范式的關系模式,通過模式分解可以轉換為若干個高一級范式的關系模式的集合,這種過程就叫規范化。
3、設計關系數據庫時,遵從不同的規范要求,這些不同的規范要求被稱為不同的范式,各種范式呈遞次規范,越?的范式數據庫冗余越?。
4、?前關系數據庫有六種范式:第?范式(1NF)、第?范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。(?般來說,數據庫只需滿?第三范式(3NF)就?)
-
依賴
四、候選碼
- 候選碼概念: (可推出所有屬性)
是一個屬性組(或屬性),通過該屬性組能推出所有的屬性,且該屬性組的任意子集都不能再推出有屬性。
即在滿足完全函數依賴的前提下,還得是最小的屬性組。
2、如何選出候選碼?
小結:(1)一定屬于候選碼的屬性:只出現在左邊,或者左右都沒出現
(2)可能屬于候選碼的屬性:左右都出現
(3)一定不屬于候選碼的屬性:只出現在右邊
step1、找出一定屬于、可能屬于、以及不屬于候選碼的屬性。
step2、先對確定的屬性求閉包,若不能構成候選碼,
再將待定的屬性逐個地與確定的屬性進行組合,做閉包運算,直到得到的屬性組能推出all屬性U。
(若兩兩結合可以找到,則不必三三結合,否則以此類推)
- 閉包運算:
- 閉包:
在關系模式R(U,F)中為F 所邏輯蘊涵的函數依賴的全體叫作F 的閉包,記為F +
- 步驟:
(2)碼分類定義:
1)超碼: 能表示出所有屬性的集合, 候選碼是最?的超碼.
2)主碼:?從候選碼??任意跳出?個作為主碼
3)主屬性:?包含在所有候選碼的屬性
4)?主屬性: 不包含在候選碼中的屬性
5)全碼: 所有的屬性都是主碼
6)外碼:關系模式R中,若有一個屬性或屬性組X,它不是R的碼,但X是另一個關系模式S中的碼,
- 四大范式
4.1分類:1NF---(消除非主屬性對碼的部分依賴)--->2NF---(消除非主屬性對碼的傳遞依賴)--->3NF
4.2范式判斷步驟:
step1.閉包(求左邊元素的組合)
step2.求候選碼->主屬性->非主屬性
step3.根據定義判斷范式
1、1NF:所有屬性都是不可分割的數據項。
1)定義:
對于關系模式R,當且僅當R中的每個屬性對應的域是原子的,
則該關系模式R屬于第一范式,即R
1NF。
- 注:不滿足第一范式的數據庫模式不能稱為關系數據庫
2、2NF:消除非主屬性對主屬性的部分函數依賴。
- 定義:
對于關系模式R,當且僅當R
1NF,且R中每一個非主屬性都完全函數依賴于候選碼時,
該關系模式R屬于第二范式,R
2NF。
- 判斷2NF:
①找出數據表中的所有候選鍵;
②找出所有主屬性和非主屬性;
③判斷所有的非主屬性對候選鍵的部分函數依賴。
3、3NF:消除非主屬性對候選碼的傳遞函數依賴。
- 定義:
對于關系模式R,當且僅當R
2NF,且R中所有非主屬性都不傳遞函數依賴于候選碼時,
該關系模式R,屬于第三范式,記作R
3NF。
- 解釋:
3NF指表中的所有數據元素不但要能唯一地被主關鍵字所標識,而且它們之間還必須相互獨立,不存在其他的函數關系。
4、BCNF:消除主屬性對主鍵的部分與傳遞依賴
1)定義:消除任何屬性對候選碼的傳遞依賴,即每一個決定因素都包含碼,表現為在函數依賴集當中,左邊的都包含候選碼(整個屬性組!)
- 公理系統
Armstrong 公理系統:設U為屬性集總體,F是U上的一組函數依賴,于是有關系模式R<U.F>,對R<U.F>來說有以下的推理規則:
- 求最小函數的依賴集
1、依賴定義:
依賴是指關系中?個或?組屬性的值可以決定其它屬性的值
2、如何求最?依賴集?
1)右切:
拆多個元素的右邊,Eg:A->BC 拆為 A->B 和A->C
- 除本求包:
除去當前元素,求它的閉包(把集合??所有元素都弄完)
若其閉包包含本來推出的元素,則刪除本條依賴
- 左部最小化:
通過遮住元素?來看能不能推出其他元素,能則去除該元素關系依賴?
Eg:BCD,遮住B看:CD能否推出B,能則去B?, 再遮住C、D……
- 模式分解
- 關系模式的規范化過程:
通過對關系模式的分解來實現的,把低一級的關系模式分解為若干個高一級的關系模式的方法并不是唯一的,在這些分解方法中,只有能夠保證分解后的關系模式與原關系模式等價的方法才有意義。
2、準則: ?損連接 和 保持函數依賴
①?損: 就是分解后再次連接,和分解之前?樣
②依賴: 依賴不變
3、判斷無損連接的方法:
step1:畫表格。
列表示所有的屬性,有多少屬性就畫多少個屬性列。行表示分解后的關系,有幾個關系就畫幾個關系行.
step2:根據每一行關系進行判斷。
找到關系中的每個屬性對應第幾到,并在相應的位置上標為aj,下標j是表格里的列數。其余關系中不存在的屬性則標為bij,i、j是表格對應的行數、列數。
step3:依次對函數依賴集里的各個依賴關系進行考案。
倒如有XY->Z。在屬性列中找到X和Y,觀察X和Y的行列上是否有相同的標記(b的下標要相同),若有,則查看它們對應在屬性列2上的各個標記。其中若有aj,則將屬性列上的這些標記全部改為aj。若沒有aj,則找到i值最小的bij,將這些標記金部改為bij。
step4:反復執行以上操作,直到某一行全部變為a為止,則表明具有無損連接性。否則不具有無損連接性。
- 數據庫設計
應用題20‘ | ER圖關系模式 |
論述題5‘ |
一、數據庫設計的基本步驟
需求分析
2 概念結構設計 ER圖或者是設計數據字典
3 邏輯結構設計 把ER圖轉為邏輯模型
4 物理結構設計 把邏輯模型轉為物理模型
5 數據庫實施 寫SQL代碼
6 數據庫運?維護 性能檢測
- 試述數據庫設計過程各個階段上的設計描述☆☆
( l )需求分析:準確了解與分析用戶需求(包括數據與處理)。
( 2 )概念結構設計:通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型。
( 3 )邏輯結構設計:將概念結構轉換為某個DBMS 所支持的數據模型,并對其進行優化。
( 4 )數據庫物理設計:為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)。
( 5 )數據庫實施:設計人員運用DBMS 提供的數據語言、工具及宿主語言,根據邏輯設計和物理設計的結果建立數據庫,編制與調試應用程序,組織數據入庫,并進行試運行。
( 6 )數據庫運行和維護:在數據庫系統運行過程中對其進行評價、調整與修改
設計一個完善的數據庫應用系統往往是上述六個階段的不斷反復。
- 試述數據庫設計過程中結構設計部分形成的數據庫模式☆☆
( l )在概念設計階段形成獨立于機器特點,獨立于各個DBMS 產品的概念模式,在本篇中就是E-R圖;
( 2 )在邏輯設計階段將E-R圖轉換成具體的數據庫產品支持的數據模型,如關系模型,形成數據庫邏輯模式,然后在基本表的基礎上再建立必要的視圖,形成數據的外模式;
( 3 )在物理設計階段,根據DBMS 特點和處理的需要,進行物理存儲安排,建立索引,形成數據庫內模式。
- 什么是數據庫的概念結構?試述其特點和設計策略
1、(1)數據庫的概念結構的含義:
數據庫的概念結構是將用戶需求綜合、歸納與抽象得到的信息結構(即獨立于具體 DBMS 的概念模型)概念結構是信息世界的結構,即概念模型,
2、主要特點是:
( l )能真實、充分地反映現實世界,包括事物和事物之間的聯系,能滿足用戶對數據的處理要求,是對現實世界的一個真實模型;
( 2 )易于理解,從而可以用它和不熟悉計算機的用戶交換意見,用戶的積極參與是數據庫設計成功的關鍵;
( 3 )易于更改,當應用環境和應用要求改變時,容易對概念模型修改和擴充;
( 4 )易于向關系、網狀、層次等各種數據模型轉換。概念結構的設計策略通常有四種:
l )自頂向下,即首先定義全局概念結構的框架,然后逐步細化;
2 )自底向上,即首先定義各局部應用的概念結構,然后將它們集成起來,得到全局概念結構;
3 )逐步擴張,首先定義最重要的核心概念結構,然后向外擴充,以滾雪球的方式逐步生成其他概念結構,直至總體概念結構;
4 )混合策略,即將自頂向下和自底向上相結合,用自頂向下策略設計一個全局概念結構的框架,以它為骨架集成由自底向上策略中設計的各局部概念結構。
- 什么是數據庫的邏輯結構設計?試述其設計步驟。
數據庫的邏輯結構設計就是把概念結構設計階段設計好的基本 E 一 R 圖轉換為與選用的 DBMS 產品所支持的數據模型相符合的邏輯結構。
設計步驟為 : ( l )將概念結構轉換為一般的關系、網狀、層次模型; ( 2 )將轉換來的關系、網狀、層次模型向特定 DBMS 支持下的數據模型轉換; ( 3 )對數據模型進行優化。
- 需求分析階段的設計目標是什么?調查的內容是什么?
- 需求分析階段的設計目標:通過詳細調查現實世界的處理對象,充分了解原系統工作概況,明確用戶的各種需求,確定新系統的功能,并考慮新系統的擴充性和變化性。
- 調查的內容:“數據”和“處理”,獲得用戶對數據庫的信息要求、處理要求以及安全性與完整性要求。
- 數據字典的內容和作用是什么?
- 數據字典的內容:
①數據項:不可再分的數據單位;
②數據結構:反映數據之問的組合關系,可以由若干個數據項或數據結構或數據項和數據結構混合組成;
③數據流:數據結構在系統內傳輸的路徑;
④數據存儲:數據結構停留或保存的地方,是數據流的來源和去向之-
⑤處理過程:具體處理邏輯一般用判定表或判定樹來描述。數據字典中只需要描述處理過程的說明性信息。
- 數據字典的作用:
數據字典是關于數據庫中數據的描述,即元數據,不是數據本身,是進行詳細的數據收集和數據分析所獲得的主要成果,在需求分析階段建立,是概念設計的基礎,在數據庫設計過程中不斷更新。
- 定義并解釋概念模型中以下術語:實體,實體型,實體集,屬性,碼,實體聯系圖(E-R 圖)
- 實體:客觀存在并可以相互區分的事物;
- 實體型:具有相同屬性的實體具有相同的特征和性質,用實體名及其屬性名集合來抽象和刻畫同類實體:
- 實體集:同型實體的集合;
- 屬性:表中的一列即為一個屬性;
- 碼:碼是能唯一標識實體的屬性,是整個實體集的性質,而不是單個實體的性質;
(6)實體聯系圖:提供表示實體型、屬性和聯系的方法,用來描述現實世界的概念模型
9.什么是數據庫的邏輯結構設計?試述其設計步驟
(1)數據庫的邏輯結構設計的含義:數據庫的邏輯結構設計是把基本 E-R 圖轉換為符合選用 DBMS 產品支持的數據模型的邏輯結構
(2)數據庫的邏輯結構設計步驟:
①將概念結構(E-R 圖)轉換為關系、網狀、層次模型;
②將轉換來的關系、網狀、層次模型轉換為特定 DBMS 支持的數據模型;
③對數據模型優化;
④設計用戶子模式。
- 規范化理論對數據庫設計有什么指導意義?
規范化理論為數據庫設計人員判斷關系模式的優劣提供理論標準,用于消除相應的數據冗余或聯系冗余,指導優化關系數據模型,預測模式可能出現的問題,為設計人員提供自動產生各種模式的算法工具,使數據庫設計工作有嚴格的理論基礎。
- 試述數據庫物理設計的內容和步驟。
(1)內容:為一個給定的邏輯數據模型選取一個最適合應用環境和要求的物理結構,并選擇存取方法、存儲結構和評價物理結構。
(2)步驟:
①確定數據庫的物理結構,在關系數據庫中主要指存取方法和存儲結構;
②評價對物理結構,評價的重點是時間效率和空間效率。若評價結果滿足原設計要求,則進入到物理實施階段,否則,需要重新設計或修改物理結構,有時要返回邏輯設計階段修改數據模型。
- 數據輸入在實施階段的重要性是什么?如何保證輸入數據的正確性?
- 重要性:
①數據的載入是數據庫實施階段重要的工作之一,且數據庫是用來對數據進行存儲、管理與應用的,因此在實施階段必須將原有系統中歷史數據輸入到數據庫;
②一般數據庫的數據量很大,且數據來源于部門中的不同單位,數據的組織方式、結構和格式與新設計的數據庫系統存在差距,組織數據錄入就要將各類源數據從各局部應用中抽取出來,分類轉換,最后綜合成符合新設計的數據庫結構的形式,輸入數據庫。因此數據轉換、組織入庫的工作是相當費力贊時的,具有較高的重要性
(2)方法:針對具體的應用環境設計一個數據錄入子系統,由計算機完成數據入庫任務。在源數據入庫前要采用多種方法對其檢驗,防止不正確的數據入庫。
15,什么是數據庫的再組織和重構造?為什么要進行數據庫的再組織和重構造?
(1)含義:
①數據庫的再組織是指按原設計要求重新安排存儲位置、回收垃圾、減少指針鏈等,提高系統性能;
②數據庫的重構造是指部分修改數據庫的模式和內模式。
(2)原因:
①數據庫運行一段時間后,記錄不斷增、刪、改,會使數據庫物理存儲情況變壞,降低數據的存取效率,數據庫性能下降,需要 DBA 對數據庫重組織;
②DBMS 一般都提供用于數據重組織的實用程序,數據庫應用環境常常發生變化,如增加新應用或新實體,取消某些應用,有的實體與實體間的聯系也發生變化等,使原有數據庫設計不能滿足新需求,需要調整數據庫的模式和內模式,需要數據庫重構造。
七、ER圖
- 數據庫編程
編程題10’ | 存儲過程 |
一、嵌入式SQL
就是把SQL語句嵌?到 其他編程語??? ?如java
二、嵌入式SQL的處理過程:
預編譯轉換為函數調?
主語?編譯
邊成主語?所編譯的類型
三、SQL與主語言的通信
1 SQL給主語?傳遞狀態
2 主語?給SQL提供參數
3 SQL把查詢結果交給主語?處理(游標,和主變量實現)
四、存儲過程
- 創建存儲過程
create?or replace procedure過程名(
[[IN|OUT|INOUT] 參數1 數據類型,
[IN|OUT|INOUT]?參數2 數據類型,
…]
) /*存儲過程首部*/
AS <過程化SQL塊>;?/*存儲過程體,描述該存儲過程的操作*/
(1)過程名:數據庫服務器合法的對象標識
(2)參數列表:需指定參數模式、參數名、以及參數的數據類型。
存儲過程有三種參數模式:
①IN輸入參數在被調用時需要指定參數值。
②OUT輸出參數調用時不傳入參數值,而是作為返回值返回。
③INOUT輸入輸出參數調用時需要傳入初始值,并會返回操作后的最終值。
(不聲明參數模式時,缺省為 IN 類型)
(3)過程體:是一個<過程化SQL塊>,包括聲明部分和可執行語句部分
2.執行存儲過程
call/perform [procedure] 過程名([參數1,參數2,...]);
使用CALL或者PERFORM等方式激活存儲過程的執行
在過程化SQL中,數據庫服務器支持在過程體中調用其他存儲過程
3.修改存儲過程
重命名: ?????alter procedure?過程名1 rename to 過程名2;
重新編譯: ???alter procedure?過程名compile;
4.刪除存儲過程
drop procedure?過程名;
五、存儲函數
1. 函數的定義
create or replace function函數名([參數1 數據類型, 參數2數據
類型, ...])
returns<類型>
as?<過程化SQL塊>;
2. 函數的執行
call / select?函數名 ([參數1,參數2,…]);
3. 修改函數
(1)重命名:
alter function?函數名1 rename to函數名2;
(2)重新編譯
alter function函數名 compile;
- 關系數據庫存儲管理
論述題 |
- 試分析每個數據庫對象對應一個操作系統文件和整個數據庫對應一個或若干個文件,這兩種存儲關系數據庫的策略各有什么優缺點。
1、每個數據庫對象對應一個操作系統文件
1)優點:
????靈活性高:每個表或數據庫對象可以獨立地進行管理。
????易于備份和恢復:可以單獨備份和恢復特定的表或數據庫對象,而不需要處理整個數據庫。
????并發控制:可以對不同的表或對象實施不同的并發控制策略,提高系統的整體性能。
????擴展性:添加或刪除表時,不需要對整個數據庫文件進行操作,簡化了擴展過程。
2)缺點:
????管理復雜性:需要管理大量的文件,這可能會增加數據庫管理系統的復雜性。
????文件系統限制:依賴于操作系統的文件系統,可能會受到文件大小或數量的限制。
????性能問題:頻繁的文件操作(如打開、關閉、讀寫)可能會影響性能。
????數據一致性:在事務處理中,需要額外的機制來確保跨多個文件的數據一致性。
2、整個數據庫對應一個或若干個文件
1)優點:
????簡化管理:整個數據庫作為一個單一的實體進行管理,簡化了文件管理的復雜性。
????性能優化:數據庫管理系統可以針對整個數據庫進行性能優化,如緩存和預讀取。
????事務一致性:更容易實現跨表的事務一致性,因為所有數據都存儲在同一個文件系統中。
????文件系統依賴性降低:數據庫管理系統可以設計自己的存儲機制,減少對操作系統文件系統的依賴。
2)缺點:
????備份和恢復困難:需要備份和恢復整個數據庫,這可能在大型數據庫中非常耗時。
????擴展性問題:添加大量數據時,可能需要對整個數據庫文件進行操作,這可能影響性能。
????并發控制限制:可能需要在數據庫級別實施并發控制,這可能不如針對單個表的并發控制靈活。
????單一故障點:整個數據庫的穩定性和可用性依賴于單個或少數幾個文件,增加了故障風險。
2.假設 Course表以定長記錄方式存儲。請描述Course 表的記錄存儲,在以下情況下一條記錄占多少字節?
① 字段可以在任何字節處開始。
② 字段必須在4的倍數的字節處開始。
③ 字段必須在8的倍數的字節處開始。
3. 試述關系表有哪些組織方式,并分析各自的優缺點。
1、堆組織
優點:簡單,易于實現;插入和刪除操作不需要移動大量數據。
缺點:查詢效率低,因為需要掃描整個表來找到所有滿足條件的記錄;沒有索引支持導致查詢性能較差。
2、排序組織
優點:可以快速進行范圍查詢,如查詢某個字段在特定范圍內的所有記錄。
缺點:插入和刪除操作可能需要移動大量數據,以保持數據的排序狀態;更新操作成本較高。
3、索引組織
優點:通過索引可以快速定位到數據,提高查詢效率。
缺點:索引本身需要維護,插入、刪除和更新操作可能需要更新索引,這會增加操作的復雜性和成本。
4、哈希組織
優點:通過哈希函數快速定位記錄,對于等值查詢非常高效。
缺點:不支持順序訪問和范圍查詢;哈希沖突可能導致性能下降。
5、B-樹和B+樹組織(B-Tree and B+Tree Organization)
優點:B-樹和B+樹提供了平衡的樹結構,可以高效地進行插入、刪除和查詢操作;B+樹特別適合于磁盤存儲系統,因為它將所有的數據記錄存儲在葉子節點,并且葉子節點之間是鏈接的,便于范圍查詢和順序訪問。
缺點:相比堆組織,B-樹和B+樹的維護成本更高,特別是在頻繁更新的情況下。
- 試述數據庫索引機制的優點。
1、優勢:
(1)表的索引塊數量通常比數據塊數量少得多
(2)可以有高效的方法快速查找索引塊
(3)若索引文件足夠小,可長期駐留內存緩沖區,加少I/O操作
2、劣勢:
?索引會帶來額外的開銷
存儲索引開銷、建立索引開銷、維護索引開銷
- 試述稠密索引和稀疏索引的優缺點。
- 稠密索引是指:索引中為表中的每一行都提供一個索引項,即使某些行的索引鍵值是相同的。
1)優點:
????快速訪問:由于每個數據項都有索引,可以快速定位到任何一條記錄。
????查詢效率:對于等值查詢(查找特定值)非常高效,因為索引項直接指向數據項。
????順序訪問:由于索引項是按照鍵值順序排列的,可以快速進行順序訪問。
2)缺點:
????空間消耗大:由于每個數據項都需要一個索引項,索引可能占用大量存儲空間。
????維護成本高:數據的插入、刪除和更新操作都可能需要更新索引,這會增加維護成本。
????性能下降:當索引鍵值有大量重復時,索引項的維護和查詢效率可能會降低。
- 稀疏索引是指:索引中只為表中的一部分數據項提供索引項,通常是那些具有不同鍵值的數據項。
1)優點:
????節省空間:由于不是每個數據項都有索引項,索引占用的存儲空間較少。
????維護成本低:只有當鍵值不重復的數據項發生變化時,才需要更新索引,減少了維護操作。
????適用于大量重復鍵值:當表中有大量重復的鍵值時,稀疏索引可以避免索引項的冗余。
2)缺點:
????查詢效率受限:對于等值查詢,如果查詢的鍵值在索引中不存在,可能需要進行全表掃描。
????順序訪問受限:由于索引項不連續,順序訪問可能不如稠密索引高效。
????范圍查詢效率:對于范圍查詢,稀疏索引可能需要更多的索引掃描和數據訪問,效率不如稠密索引。
- 數據庫恢復技術
應用題10‘ | 事務? |
一、事務
1、事務:
事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。
事務是恢復和并發控制的基本單位。
2、事務的四?特性:
(1)原?性 autom: 要么全做,要么全不做,是一個不可分割的工作單位。
(2)?致性?consistent:事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。
①一致性狀態:數據庫中只包括事務成功提交的結果
②不一致狀態:運行中發生故障,有些事務尚未完成,被迫中斷。或者未完成事務的一部分操作已寫入數據庫
- 隔離性isolate:?個事務的執?不能被其他事務所?擾
一個事務內部操作及使用的數據對其他并發事務是隔離的。或者,并發執行的各個事務之間不能互相干擾。
(4)持久性 duration:數據庫的改變是永久的。?如要落?磁盤
3、事務有三種模式:
(1)自動提交事務模式
(2)顯式事務模式
commit:事務正常結束
? 提交事務的所有操作
? 事務中所有對數據庫的更新寫到磁盤上
rollback:事務異常終止
? 系統將事務中對數據庫的所有已完成的操作全部撤銷。
? 事務回滾到開始狀態
- 隱式事務模式
set?implicit_transactions on
功能:啟動隱式事務,語句不再自動提交,需要用COMMIT 或
ROLLBACK提交或回滾
SET IMPLICIT_TRANSACTIONS OFF
功能:取消隱式事務,恢復自動提交事務模式
- 故障種類:
- 事物內部故障
- 定義:事務內部更多故障是非預期的,是不能由應用程序處理的。
- 事務故障的恢復:撤消事務(UNDO)
①強行回滾(ROLLBACK)該事務
②撤銷該事務已經做出的任何對數據庫的修改,使得該事務象根本沒有啟動一樣
- 系統故障 DBMS
(1)定義:稱為軟故障,是指造成系統停止運轉的任何事件,使得系統要重新啟動
(2)恢復事務:
未提交事務:強行撤消(UNDO)
已提交事務(緩沖區中的信息尚未完全寫回到磁盤上):重做(REDO)
系統突然停轉,系統要重啟
- 介質故障:硬件損壞
介質故障的恢復:重裝數據庫,重做已經完成的事務
- 計算機病毒
小結:
①恢復的基本原理:冗余(利用冗余數據重建數據庫中已被破壞或不正確的那部分數據)
②恢復的實現技術:復雜
- 恢復方式
數據轉儲
對失敗的事務重新執?
?志?件
記錄事務對數據的更新操作的?件
- 恢復策略
- 事務調度
(1)一組事務的調度必須保證:
包含了所有事務的操作指令;一個事務內部的指令順序必須保持不變
(2)并行事務調度必須保證:
可串性化,將所有可能的串行調度結果推演一遍,對于某個具體的并行調度
再執行一遍,看是否能與某個串行調度的結果相同
(3)判斷可串性化的充分條件:沖突可串性化(沖突可串性化一定是可串
性化調度,但可串性化調度不一定是沖突可串性化)
沖突操作:不同事務對同一數據分別進行讀和寫;不同事務對同一數據分別
進行寫和寫
沖突可串性化調度即不交換不同事務的沖突操作次序,也不交換同一事務的
兩個操作的次序。但可以交換不同事務對不同數據各種操作次序,也可以交
換不同事務對同一數據的讀取操作次序
- 并發控制
設計題10’ | 并發執行順序,發生了什么問題?怎么解決? |
- 并發
1.1并發帶來的問題
- 丟失修改
兩個事務T1和T2讀入同一數據并修改,T2的提交結果破壞了T1提交的結果,導致T1的修改被丟失。
- 讀臟數據
-
不可重復讀
指事務T1讀取數據后,事務T2執行更新(修改、插入、刪除)操作,使T1無法再現前一次讀取結果。
1.2數據不一致性原因:
并發操作破壞了事務的隔離性
1.3數據的并發控制:
在多用戶共享的系統中,保證數據庫的完整性不受破壞,避免用戶得到不正確的數據。
- 封鎖
2.1封鎖
封鎖就是事務T在對某個數據對象(例如表、記錄等)操作之前,先向系統發出請求,對其加鎖。
2.2封鎖類型
1、排它鎖:寫鎖 X鎖
某事務對數據對象上鎖后,可讀取和修改該數據對象,其他事務不可再對該數據對象添加鎖
表示方法:上鎖Xlock( ) 釋放鎖Unlock( )
2、共享鎖:讀鎖S鎖
某事務對數據對象上鎖后,可讀取但不可修改該數據對象,其他事務可對該數據對象添加S鎖,但不能添加X鎖
表示方法:上鎖Slock( ) 釋放鎖Unlock( )
2.2封鎖協議
- 一級封鎖協議:
寫前加寫X鎖,事務結束釋放寫X鎖;可防止丟失修改
- 二級封鎖協議:
寫前加寫X鎖,讀前加讀S鎖,讀完釋放讀S鎖,事務結束釋放寫X鎖;可防止丟失修改和讀臟數據
- 三級封鎖協議(常用:支持一致性維護):
寫前加寫X鎖,讀前加讀S鎖,事務結束釋放各鎖;可防止丟失修改、讀臟數據和不可重復讀
如果所有事務均遵循三級封鎖協議,由于其隔離級別高,那么這些事務無論怎樣交叉并行,都是可串性化的調度
1.4兩段鎖協議(2PL)
1、三級封鎖協議可以保證并發操作的正確性,但由于其太過嚴苛,對并發度有負面影響。三級封鎖協議實際是兩段鎖協議的特例,是更嚴格的兩段鎖協議
2、兩段鎖協議要求:事務在對任何數據進行讀寫前,需要獲得對該數據的封鎖;而當事務在釋放任何一個封鎖后,不可再獲得任何其他封鎖事務遵循兩段鎖協議是可串性化的充分條件,遵循兩段鎖協議是可能發生死鎖的
- 可串行性:
假設多種情況都可以,然后獲得結果,
如果并發執?的結果跟上?的結果??任意?個?樣就可以
事務T1: 讀取B,A=B+1,寫回A
事務T2: 讀取A,B=A+1,寫回B
那么結果假設先T1, 在T2 , 那么A=4,B =3;
假設先T2 ,那么A=3, B =4;
活鎖: 先來先服務
死鎖:
預防方法
一次封鎖法
順序封鎖法
死鎖的診斷與解除
超時法
等待圖法
解決死鎖:選擇一個代價最小的事務終止