第6章 存儲技術與數(shù)據(jù)庫物理設計
6.1 物理設計是在具體的硬件環(huán)境、OS、DBMS約束下,基于邏輯設計,設計具體數(shù)據(jù)存儲結(jié)構和存取方式。目的:占用空間少、訪問效率高、維護代價低。主要步驟有數(shù)據(jù)庫邏輯模式調(diào)整、文件組織與存取設計、數(shù)據(jù)分布設計、安全模式設計、確定系統(tǒng)配置、物理模式評估。
6.2 索引技術(Indexing)是一種快速文件訪問技術,它將文件記錄在某個或某些域(或稱為屬性)上的取值與該記錄的物理地址直接聯(lián)系起來,提供了一種根據(jù)記錄域的取值快速訪問文件記錄的機制。索引文件是一種利用索引技術支持快速文件訪問的文件組織和存取方法。
索引加快了查詢記錄卻減慢了數(shù)據(jù)更新速度,本身還占用一定的存儲空間。
6.3 文件組織:如何將關系數(shù)據(jù)庫中的關系映射為操作系統(tǒng)中的數(shù)據(jù)庫文件,及管理文件。
文件結(jié)構:如何將DB文件中的邏輯記錄映射到物理文件的中磁盤塊。
文件存。横槍δ撤N結(jié)構的DB文件,如何查、添刪改其中的邏輯記錄
6.4 數(shù)據(jù)字典:數(shù)據(jù)庫各類對象的描述信息、數(shù)據(jù)庫管理系統(tǒng)的控制信息。包括關系模式信息、與視圖描述有關的信息、關系的存儲結(jié)構和存取方法信息、完整性約束、安全性有關的信息、數(shù)據(jù)庫運行統(tǒng)計信息。
作用:DBA用來監(jiān)視DBMS的使用情況并協(xié)助完成管理工作;一般用戶可用于查閱部分數(shù)據(jù)庫結(jié)構信息;DBS運行時各子系統(tǒng)頻繁使用以完成相應的存儲和查詢處理功能。
6.5 DBMS的三種完整性控制機制:CHECK子句、斷言、觸發(fā)器
斷言語句:Create assertion 斷言約束名 check (…)
6.6 堆文件:數(shù)據(jù)量少且操作頻繁;批量加載數(shù)據(jù)(先選為堆文件再調(diào)整文件結(jié)構)
順序文件:查詢條件定義在查找碼上;快速的二分查找
散列文件:基于散列域值的等值匹配,特別是訪問順序是隨機的。非精確查詢;非散列域
B-樹和B+-樹:大數(shù)據(jù)量基本表;聚焦文件:多表連接操作
6.7有序索引技術利用索引文件實現(xiàn)查找碼取值到記錄物理地址間的映射關系。索引文件由索引記錄組成,每個記錄中的索引項記錄了某個特定的查找碼值和具有該值的數(shù)據(jù)文件記錄的物理地址。
當需要訪問數(shù)據(jù)文件中某個數(shù)據(jù)記錄時,先根據(jù)查找碼值查閱索引文件,找到對應的索引項,然后從索引項中找出數(shù)據(jù)記錄在數(shù)據(jù)文件中的物理地址.根據(jù)這個地址訪問數(shù)據(jù)記錄。
6.8散列技術是一種快速文件訪問技術,它利用散列函數(shù)實現(xiàn)文件記錄域取值到記錄物理地址間的直接映射關系。當需要訪問數(shù)據(jù)文件中查找碼值為si的某個或某些文件記錄時,將si作為散列函數(shù)h的輸入計算得出的散列函數(shù)輸出值h(si)就是文件記錄在數(shù)據(jù)文件中的物理地址。
6.9 權限:允許用戶對一給定的數(shù)據(jù)庫對象可執(zhí)行的操作(查詢、添刪改、新建、備份等)。
第12章 SQL Server2000數(shù)據(jù)庫管理系統(tǒng)
12.1 四個服務:SQL Server 核心服務;
SQL Server Agent:代理服務,代理定期進行的管理工作;
DTC:Distributed Transaction Coordinator,分布式事務協(xié)調(diào)器,同一事務訪問多個服務器
Microsoft Search:全文檢索服務
12.2 四個版本:企業(yè)版(全部功能、大型數(shù)據(jù)庫)、標準版(小部門)、開發(fā)版(同企業(yè)版,作開發(fā)測試系統(tǒng)用,不作生產(chǎn)服務用)個人版(移動環(huán)境、本地數(shù)據(jù))
12.3 服務帳戶:使用本地系統(tǒng)帳戶:自動取當前登錄到Windows的用戶,沒有Windows的網(wǎng)絡訪問權限,適用于非網(wǎng)絡服務器操作系統(tǒng)(如XP);使用域用戶帳戶:使用Windows身份驗證設置連接到SQL Server,用戶必是Windows系統(tǒng)管理員,適用于網(wǎng)絡服務器OS
12.4網(wǎng)絡庫:在SQL S客戶端和服務器間傳遞網(wǎng)絡數(shù)據(jù)包。服務器可一次監(jiān)聽多個網(wǎng)絡庫
12.5 SQLServer的兩大類數(shù)據(jù)庫:系統(tǒng)數(shù)據(jù)庫:DBMS自動創(chuàng)建及維護,存放維護系統(tǒng)正常運行的信息,master(系統(tǒng)級信息)、msdb(支持自動執(zhí)行任務)、model(所有用戶數(shù)據(jù)庫的公共信息)、tempdb(臨時數(shù)據(jù)庫),示例Pubs、Northwind;用戶數(shù)據(jù)庫
12.6 估算存儲空間:SQLServer數(shù)據(jù)存儲單位為頁(Page),一個數(shù)據(jù)頁是一塊8KB的連續(xù)磁盤空間,行不能跨頁存儲,一行數(shù)據(jù)的大小不能超過一頁的大小。一個表10000行數(shù)據(jù),每行3000字節(jié),則需要(10000/2)*8KB=40MB的空間。
12.7 主數(shù)據(jù)文件:擴展名為.mdf,包含數(shù)據(jù)庫系統(tǒng)信息并可存放用戶數(shù)據(jù)庫數(shù)據(jù),每個數(shù)據(jù)庫只有一個主數(shù)據(jù)文件。輔助數(shù)據(jù)文件:擴展名為.ndf,數(shù)據(jù)量很大時使用,可存放在不同的磁盤驅(qū)動器上,以便得利用多個磁盤上的存儲空間并提高數(shù)據(jù)存取的并發(fā)性。
12.8 每個數(shù)據(jù)文件及日志文件(.ldf)初始大小均不得小于512KB,主數(shù)據(jù)文件大小不得小于model數(shù)據(jù)庫主數(shù)據(jù)文件,日志文件最好不小于1MB
12.9 創(chuàng)建數(shù)據(jù)庫:CREAT DATABASE jessymin
ON ――表示數(shù)據(jù)庫按下面參數(shù)創(chuàng)建
( NAME = jessymin, ――邏輯文件名
FILENAME = ‘…MSSQLDatajessymin_Data.mdf’, ――OS下的物理文件名
SIZE = 10,――文件初始大小,單位默認為MB,下同
MAXSIZE =30,――文件最大大小
FILEGROWTH = 5,――文件增量,為0表示不自動增長,默認按當前10%增長)
LOG ON ――表示該數(shù)據(jù)庫日志文件按下面參數(shù)創(chuàng)建
(……。.同上,只是物理文件名為jessymin.LDF)
12.10 刪除數(shù)據(jù)庫:DROP DATABASE jessymin。刪除六種數(shù)據(jù)庫對象均用DROP
12.11 Transact-SQL:非過程化高級語言,全司變量@@,局部變量@,局部變量可以是自定義類型但不能是text或image類型。
12.12 Transact-SQL示例:計算1+2+3+…+100的和:
DECLARE @i int, @sum int
SET @i = 1,@sum = 0 --SET可換為SELECT
WHILE @i 《=100
BEGIN
SET @sum = @sum + @i
SET @i = @i +1
END
PRINT @sum
12.13 DTS(Data Transformation Service)數(shù)據(jù)轉(zhuǎn)換服務。注意區(qū)別DTC(分布式事務協(xié)調(diào)器)。導出數(shù)據(jù)時用戶必須是要連接的數(shù)據(jù)庫服務器的合法用戶,且對要導出的表具有查詢權限
第13章 數(shù)據(jù)庫對象
13.1 存儲過程的:SQL語句和控制流語句的預編譯集合,應用程序可通過調(diào)用方法來執(zhí)行
優(yōu)點:模塊化程序設計;提高性能;減少網(wǎng)絡流量;可作為安全機制使用
13.2 帶有多個參數(shù)并有默認值及輸出參數(shù)的存儲過程示例:
CREATE PROCEDURE p_Example
@area varchar(20) = ‘武漢大學’,@Price money,@Sum int output
AS
SELECT/UPDATE/INSERT/DELETE……
SET @Sum = …。.
應用程序中執(zhí)行的SQL語句:
Declare @res int
EXECUTE p_Example ‘武漢大學信息學部’,1000,@res output
或者 EXECUTE p_Example @Price =1000,@res output
13.3 用戶自定義函數(shù):標量函數(shù)(返回單值,非text、Image類型,任何允許出現(xiàn)表達式的地方)、內(nèi)嵌表值函數(shù)(返回一個表,放在查詢語句的From子句中)、多語句表值函數(shù)(返回一個可自定義的表,也放在查詢語句的From子句中,視圖和存儲過程的結(jié)合)
13.4 標量函數(shù)救示例:根據(jù)指定的商品類別查詢該類的商品個數(shù)。
CREAT FUNCTION dbo.f_GoodsCount(@class varchar(10))
RETURNS int
AS
BEGIN
DECLARE @x int
SELECT @x=count(*) From T_GoodsClass a JION T_Goods b
ON a.GoodClassID = b.GoodClassID
WHERE GoodClassName = @class
RETURN @x
END
調(diào)用:SELECT dbo.f_GoodsCount(‘服裝’) 或者
SELECT GoodsName AS 商品名,dbo.f_GoodsCount(‘服裝’) AS 種類數(shù) From …。
13.5 內(nèi)嵌表值函數(shù)的不同之處在于RETURNS 后只能是table,RETURN后面只能是單個的 SELECT語句,沒有相關聯(lián)的返回變量也沒有函數(shù)體。調(diào)用時放在查詢語句的FROM子句中。
13.6 觸發(fā)器是一種不需要由用戶來調(diào)用的存儲過程,當用戶對表進行UPDATE、INSERT或DELETE操作時自動觸發(fā)執(zhí)行。作用:保證業(yè)務規(guī)則和數(shù)據(jù)完整性。優(yōu)點:用編程方法來實現(xiàn)復雜的處理邏輯和業(yè)務規(guī)則,增強數(shù)據(jù)完整性約束。
13.7 觸發(fā)器適用場合:比CHECK語句更復雜的數(shù)據(jù)約束(可引用其他表中的列);為保證數(shù)據(jù)庫性能而維護的非規(guī)范化數(shù)據(jù)(如增加統(tǒng)計總值的列);實現(xiàn)復雜的業(yè)務規(guī)則
13.8 AFTER/FOR:后觸發(fā)型觸發(fā)器,可在同一操作上建立多個;INSTEAD OF:前觸發(fā)型,在同一操作上只能建立一個。所有的涉及對數(shù)據(jù)庫對象操作的語句均不允許出現(xiàn)在觸發(fā)器中。
13.9 DELETED表:存儲UPDATE和DELETED操作語句所影響行的更新前的舊數(shù)據(jù);
INSERTED表:存儲UPDATE和INSERT操作語句所影響行的更新后的新數(shù)據(jù)。
13.10 維護數(shù)據(jù)操作完整性的后觸發(fā)器示例:銷售量大于庫存量則撤銷當前銷售,小于時則在插入銷售單據(jù)明細時同時修改庫存量。
Create Trigger OperatonCon
ON T_SaleDetail FOR INSERT
AS
IF EXISTS(Select * From inserted a Jion T_Goods b
ON a.GoodsID = b.GoodsID WHERE a.Quanity 》 b.TotalCharge)
BEGIN
ROLLBACK
PRINT ‘此商品庫存量小于此次銷售數(shù)量’
END
ELSE
UPDATE T_Goods SET TotalCharge = TotalCharge –
(SELECT Quanity From inserted)
13.11 維護不同列之間取值完整性的后觸發(fā)器示例:保證商品表中的單價與價格變動表中一致
CREATE TRIGGER PriceConstraint
ON T_PriceHistory FOR INSERT, UPDATE
AS
DECLARE @newprice money
SELECT @newprice = SalePrice From inserted
UPDATE T_Goods SET SaleUnitPrice = @newprice
WHERE GoodsID IN (SELECT GoodID From inserted )
13.12 前觸發(fā)器指定執(zhí)行觸發(fā)器而不執(zhí)行引發(fā)觸發(fā)器的SQL語句,因此,如果數(shù)據(jù)操作滿足完整性約束則在觸發(fā)器中必須重新執(zhí)行這些數(shù)據(jù)操作語句。
前觸發(fā)器示例:保證銷售單據(jù)中的會員卡是有效日期內(nèi)的會員卡:
CREATE TRIGGER CardValid
ON T_SaleDetail INSTEAD OF INSERT, UPDATE
AS
IF NOT EXISTS (SElETCT * From inserted a JOIN T_Card b ON a.CardID=b.CardID
WHERE a.SalDate NOT BETWEEN b.StartDate AND b.EndDate)
INSERT INTO T_SaleDetail SELECT * From inserted (若滿足條件此語句重新執(zhí)行)
13.13 用SQL語句修改存儲過程、用戶自定義函數(shù)、觸發(fā)器的語法與創(chuàng)建基本一致,只是將CREATE改為了ALTER。(查詢分析器中實現(xiàn))
第14章 安全管理
14.1 數(shù)據(jù)庫的安全控制:在DBMS的不同層次提供對有意和無意損害行為的安全防范。
有意的非法活動:加密存、取數(shù)據(jù);有意的非法操作:用戶身份驗證、限制操作權;
無意的損壞:提高系統(tǒng)的可靠性和數(shù)據(jù)備份
14.2 數(shù)據(jù)庫權限的種類:對DBMS進行維護的權限;對數(shù)據(jù)庫對象和數(shù)據(jù)進行操作的權限
SQL Server權限種類(與數(shù)據(jù)庫用戶分類對應):隱含權限(預定義的內(nèi)置權限);語句權限(DDL語句權限,創(chuàng)建刪除數(shù)據(jù)庫對象);對象權限(DML語句權限,操作數(shù)據(jù)庫對象)
14.3 數(shù)據(jù)庫用戶的分類:數(shù)據(jù)庫系統(tǒng)管理員(SA,全部權限);數(shù)據(jù)庫對象擁有者(創(chuàng)建數(shù)據(jù)庫對象的用戶,對所擁有的對象具有一切權限);普通用戶:只具有對數(shù)據(jù)的編輯查詢功能
14.4 三個認證過程:身份認證,只認證用戶是否有連接到數(shù)據(jù)庫服務器的“連接權”;合法用戶,驗證是否是數(shù)據(jù)庫的合法用戶;權限認證,驗證用戶是否具有要進行的操作的操作權限
14.5 系統(tǒng)內(nèi)置的登錄賬戶:BUILTINAdministrator;SA;域名Administrator,均DBMS管理員
14.6 創(chuàng)建SQL Server身份認證的登錄賬戶:EXECUTE sp_addlogin ‘user3’,’123’,’jessymin’
User3為登錄賬戶,123為密碼,jessymin為默認數(shù)據(jù)庫;WINDOWS認證:sp_grantlogin
14.7 刪除登錄賬戶存儲過程:EXEC droplogin ‘user3’(SQL Server身份驗證);EXEC revokelogin ‘Server1nt_user’(WINDOWS身份驗證)
14.8 登錄賬戶可以連接到SQL Server服務器上但并不具有訪問任何數(shù)據(jù)庫的能力,必須再成為數(shù)據(jù)庫的合法用戶。一個登錄賬戶可以映射為多個數(shù)據(jù)庫用戶,管理數(shù)據(jù)庫用戶的過程實際上就是建立登錄賬戶與數(shù)據(jù)庫用戶之間的映射關系的過程。新建的數(shù)據(jù)默認只有一個用戶:dbo,它是數(shù)據(jù)庫的擁有者。
14.9 創(chuàng)建數(shù)據(jù)庫用戶:EXEC sp_adduser ‘U2’,’U2’,’user_role’,用戶名與登錄賬戶一致,并讓其成為“user_role”角色的成員。刪除:EXEC sp_dropuser ‘U2’
14.10 合法用戶除了對所屬數(shù)據(jù)庫系統(tǒng)表具有一些查詢權限外并不對數(shù)據(jù)庫中的用戶數(shù)據(jù)和對象具有任何權限,還得得到對數(shù)據(jù)庫數(shù)據(jù)和對象的操作權限
14.11 收回權限:不允許用戶或角色具有某種操作權,或者收回曾經(jīng)授予的權限,置空標記;
拒絕訪問:拒絕某用戶或角色具有某種操作權,即使由于繼承獲得的權限也無效,叉叉標記
14.12 用Transact-SQL語句管理對象權限入管理語句權限:P245
14.13 角色:數(shù)據(jù)庫中具有相同權限的一組用戶。系統(tǒng)預定義的固定角色;自定義用戶角色
14.14 固定的服務器角色:*amdin + dbcreator,權限最重要最高的是sysadmin,角色成員源均為系統(tǒng)的登錄賬戶:EXEC sp_addsrvrolemember ‘Server1nt_user’ ,‘sysadmin’
14.15 固定的數(shù)據(jù)庫角色:db_*+public,權限最高的是db_owner:EXEC sp_addrolemember ‘db_owner’,’user3’ (注意用戶和用色的順序)
14.16 public角色:每個用戶均自動為其成員,不具任何權限但可賦予權限。如果想讓所有數(shù)據(jù)庫用戶均具有某個特定權限則可將該權限授予public
14.17 用戶自定義的用戶角色:EXEC sp_addrole ‘myrole’
14.18 只要權限沒有被拒絕過,角色中成員權限是角色的權限加上成員自己的權限。
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |