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