250 likes | 441 Views
資料庫系統概論 CH07 資料表的相關設計. 鄧姚文. 大綱. 欄位 資料表設計 索引設計. 欄位 設計. http :// msdn.microsoft.com/en-us/library/ms187752%28v=sql.105%29.aspx. 可用的欄位型態 -如表 7-1 文字、數字、日期及時間、空間、二進位及其它 欄位型態不止限制可儲存的資料範圍,也定義了佔用的儲存空間 為欄位定義適用的欄位型態. 欄位 的重要屬性. 識別欄位 IDENTITY 自動編號,每一資料表只可擁有一個識別欄位 其值由 SQL Server 自動輸入
E N D
大綱 欄位 資料表設計 索引設計
欄位設計 http://msdn.microsoft.com/en-us/library/ms187752%28v=sql.105%29.aspx • 可用的欄位型態-如表7-1 • 文字、數字、日期及時間、空間、二進位及其它 • 欄位型態不止限制可儲存的資料範圍,也定義了佔用的儲存空間 • 為欄位定義適用的欄位型態
欄位的重要屬性 • 識別欄位 IDENTITY • 自動編號,每一資料表只可擁有一個識別欄位 • 其值由SQL Server自動輸入 • 通常只做為程式設計的參考之用 • 計算資料行 • 內容是由公式計算而來 • 關於Null值 • 儘量避免使用Null
條件約束 • 條件約束(Constraint)之功能是為資料表的記錄予以限制,只有符合約束的記錄才可以儲存 • 條件約束的種類 • 主索引條件約束 • 外部索引鍵條件約束 • 唯一條件約束 • 預設條件約束-會顯示在Management Studio的「條件約束」 • 檢查條件約束
建立條件約束 • 在Management Studio操作介面可以建立的條件約束種類是檢查條件約束
停止及啟用條件約束 ALTER TABLE Orders NOCHECK CONSTRAINT CK_Orders; INSERT INTO Orders (OrderCode, CustCode, ShipDate, OrderDate) VALUES ('O-001','C-001',getdate()-1, getdate()); ALTER TABLE Orders CHECK CONSTRAINT CK_Orders; • 可被停用的條件約束種類 • 只有檢查及外部索引鍵條件約束,可以被停用
預設值 CREATE DEFAULT NextMonthDate1 AS DateAdd(m,1,getdate()-day(getdate())+1); GO CREATE DEFAULT DFPWD AS 'password' GO CREATE DEFAULT Zero AS 0; 儲存新記錄時若欄位內沒有資料,就以預設值定義 建立預設值-只能使用T-SQL
預設值 繫結預設值
規則 CREATE RULE rule_BusinessID AS @value Like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' GO CREATE RULE rule_PersonalID AS @value Like '[A-Z][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' GO CREATE RULE rule_Last30Days AS @value > getdate()-30 • 建立規則-只能使用T-SQL
規則 exec sp_bindrule 'rule_BusinessID', 'CustomerSupplier.BusinessID' exec sp_bindrule 'rule_PersonalID', 'Employee.PID' exec sp_unbindrule 'CustomerSupplier.BusinessID' exec sp_unbindrule 'Employee.PID' 繫結規則-只可使用T-SQL 解除繫結規則-只可使用T-SQL
使用者定義資料類型 • 建立使用者定義類型 • 必要設定是新類型名稱及原始類型
7-2資料表設計使用者定義類型 • 引用使用者定義類型 • 指定至欄位類型
SQL Server的索引架構 • 索引的組成 • 組成單位是欄位 • 一個索引可以含有一或多個欄位 • 對SQL Server而言,索引就像一個迷你資料表 • 所有更新、刪除等動作,都會引發SQL Server在背景維護索引的一連串處理
索引運作方式 • SQL Server內部處理索引的架構是B-tree • 頁(Page)是SQL Server內部儲存資料的基礎單位 • 一頁的大小是8092 bytes • 索引的B-tree架構,最多只有三層 • 索引資料必定在最下層 • 上層記錄的是指向其下層所資料的指標
索引 B-tree ROOT 樹根 LEAF 樹葉
叢集及非叢集索引 • 每一資料表只能有一個叢集索引 • 主索引預設就是叢集索引 • 資料表所含記錄的順序 • 索引頁架構中,分葉層所含內容就是實際資料 • 可以有至多1000個非叢集索引 • 排序不套用至資料表 • 其內資料與其在資料表的實際位置可能不同 • 分葉層只含有指向實際資料位置的指標
索引的種類 • XML索引 • 使用於XML欄位型態的索引 • 全文檢索索引 • 可以建立在char、varchar、xml、varbinary等型態的欄位 • 可指定語言別、贅字、同義字 • 空間索引 • 使用於geometry及geography等兩種類型的欄位
建立索引的原則 • 使用叢集索引 • 欄位內包含大量不同資料。 • 常使用BETWEEN、>、>=、<與<= 等運算子傳回一個數值範圍的欄位。 • 經常做為排序依據的欄位。 • 經常使用JOIN或GROUP BY子句所存取的欄位。 • 需要迅速查閱單一欄位的OLTP應用,通常就是透過主索引鍵。依據主索引鍵建立一個叢集索引。 • 使用整數資料索引鍵做為叢集索引。此外,對於唯一、非NULL或識別欄位(資料行)建立叢集索引
建立索引的原則 • 使用非叢集索引 • 不會傳回大量結果集的查詢 • 會傳回各欄資料完全相符的查詢中,所設定的搜尋條件常會用到的欄位 • 經常需要執行聯結與群組的查詢,為聯結和群組設定中用到的欄位,建立多個非叢集索引
建立及管理索引 • 建立索引 • 指定一或多個欄位及屬性
重整索引 • 索引需要定期手動重整 • 系統運行一段時間之後,索引可能會產生許多影響效率的片段 • 產生片段的原因是索引頁的分割及維護 • 分割多次後,有可能產生許多資料不滿一頁的索引頁 • 在索引的屬性中查看片段資訊及執行重整
停用及啟用索引 • 停用的時機通常是管理人員需要進行維護 • 若停用叢集索引,會造成該索引所在的資料表禁止存取 • 若停用非叢集索引,則除了索引被停用外,會造成索引內資料被刪除,但會保留索引定義 • 索引被停用之後,只有重新建立,才可啟用