- 由淺入深學SQL Server:基礎、進階與必做300題
- 王俊 鄭笛編著
- 3647字
- 2018-12-27 20:35:37
第3章 設計和創建數據庫
數據庫是所有數據庫對象的承載,也是SQL Server 2008相關知識學習的起點。本章將重點學習使用SQL Server 2008進行設計和創建的方法。首先介紹數據庫設計的相關內容:模型結構、關系與范式;接下來講述SQL Server 2008中的系統數據庫,以及它們在SQL Server 2008中的使用和所提供的管理作用;最后講述如何創建用戶數據庫和有關數據庫的管理。
在本章中,將重點學習以下內容:
● 數據模型的分類與概念。
● 使用ER模型的關系數據庫設計。
● 第一范式、第二范式與第三范式。
● SQL Server 2008的預設數據庫。
● 使用SQL Server 2008創建數據庫。
● 使用SQL Server 2008管理數據庫。
3.1 數據庫設計——模型與結構
現實世界中,個體間總存在著某些聯系。反映到信息世界中,就是實體的聯系,由此構成實體模型。反映到數據庫系統中,是記錄間的聯系。將實體模型數據化,轉化成數據模型,這個過程就是我們抽象實際數據和設計數據庫的過程。
3.1.1 數據模型的基本概念
在數據庫中,用數據模型(Data Model)這個工具來抽象、表示和處理現實世界中的數據和信息。通俗地講,數據模型就是現實世界的模擬。根據應用目的,模型分為兩個層次。
● 概念模型(信息模型):從用戶角度看到的模型。該模型要求概念簡單,表達清晰,易于理解。
● 數據模型:從計算機角度看到的模型。要求使用有嚴格語法和語義的語言對數據進行嚴格形式化定義、限制和規定,使模型能轉變為計算機可以理解的格式。主要包括網狀模型、層次模型、關系模型等。
數據庫中的數據是高度結構化的。也就是說,數據庫不僅要考慮記錄內的各個數據項之間的關系,還要考慮記錄與記錄之間的關系。
數據模型主要是指描述這種聯系的數據結構形式。在數據庫的開發過程中主要有下面3種數據模型:層次模型、網狀模型和關系模型。其中層次模型和網狀模型統稱為非關系模型,在數據庫發展的歷史中曾經占據很重要的地位,但現在基本上被關系模型所替代了。以SQL Server、Oracle等為代表的數據庫管理系統針對的都是關系型數據庫的管理,因此在現有數據庫的設計中,我們首先要關注的就是關系的建立和管理問題。
3.1.2 層次模型
層次模型用樹形結構來表示各類實體及實體間的聯系。每個節點表示一個記錄類型,節點之間的連線表示記錄類型間的聯系,這種聯系只能是父子聯系。每個記錄類型可包含若干個字段。在這個模型里,記錄類型描述的是實體,字段描述實體的屬性。任何一個給定的記錄值只有按其路徑查看時,才能顯示出它的全部意義,沒有一個子記錄值能夠脫離雙親記錄值而獨立存在。如圖3-1所示是一個簡單的層次模型示意圖。

圖3.1 層次模型示意圖
層次數據模型的操作主要有查詢、插入、刪除和更新。進行插入、刪除、更新操作時要滿足層次模型的完整性約束條件:
● 進行插入操作時,如果沒有相應的雙親節點值就不能插入子女節點值。
● 進行刪除操作時,如果刪除雙親節點值,則相應的子女節點值也被同時刪除。
● 進行更新操作時,應更新所有相應記錄,以保證數據的一致性。
層次數據模型的優點:數據模型比較簡單,操作方便;對于實體間聯系是固定的,且預先定義好應用系統,性能較高;提供良好的完整性支持。層次數據模型的缺點:不適合于表示非層次性的聯系;對插入和刪除操作的限制比較多;查詢子女節點必須通過雙親節點;由于結構嚴密,層次命令趨于程序化。
3.1.3 網狀模型
網狀數據模型是一種比層次模型更具普遍性的結構。它去掉了層次模型的兩個限制,允許多個節點沒有雙親節點,允許節點有多個雙親節點。此外,它允許兩個節點之間有多種聯系(復合聯系)。
● 網狀數據模型的優點:能夠更為直接地描述現實世界;具有良好的性能,存取效率較高。
● 網狀數據模型的缺點:其數據定義語言極其復雜;數據獨立性較差。由于實體間的聯系本質上是通過存取路徑指示的,因此應用程序在訪問數據時要指定存取路徑。
3.1.4 關系模型
一個關系模型的邏輯結構是一張二維表,它由行和列組成。在關系模型中,實體及實體間的聯系都用關系來表示。關系模型要求關系必須是規范化的,最基本的條件就是關系的每一個分量必須是一個不可分的數據項,即不允許表中還有表。例如,表3.1所示的學生信息表就是一個關系模型。
表3.1 2008級學生信息表

該表涉及如下一些概念:
● 關系:對應通常所說的表,如表3.1所示的這張基本信息表。
● 記錄:圖中的一行即為一個記錄,如果表3.1中有20行,即有20個記錄。
● 屬性:圖中的一列即為一個屬性,如表3.1中有5列,對應5個屬性(編號、姓名、年齡、籍貫、專業)。
● 鍵(關鍵字):在關系型數據庫的表中,鍵是標識記錄的一種方式。因為鍵涉及的是全部的記錄,所以可以使用鍵來建立表之間的關系。例如,當要用到不同表中的同名列進行工作時,可以利用這種特性。以鍵作為一種捷徑,能夠很容易地在兩個表之間建立鏈接。當唯一地標識表中的記錄是數據庫設計中的重要部分時,鍵也能被使用。當單獨一個列足以標識記錄時,可以將鍵定義在單一的列上,否則,將鍵定義在多個列上。
主關鍵字:表3.1中的某個屬性組,它可以唯一確定一個記錄。例如,表3.1中的編號是按照學生學號的編排方法,每個學生的學號都是不同的,所以它可唯一確定一名學生,也就成為本關系的主關鍵字。主鍵是最重要的一種鍵的類型。定義主鍵的列必須只包含唯一的值。為此,不可能在任何允許NULL值的列上定義主鍵。關于主鍵的另一個限制是,一個表只能有一個主鍵。可以利用主鍵把一個表中的數據與另一個表中的數據相關聯。
候選關鍵字:那些可以用做關鍵字的屬性或屬性的組合。例如,在表3.1中編號和(編號,姓名),它們都能唯一標識下面中的每一行,編號和(編號,姓名)均是候選關鍵字。可以指定編號也可以指定(編號,姓名),被指定的就是主關鍵字。
公共關鍵字:連接兩個表的公共屬性。例如,表3.1和表3.2是通過編號進行聯系的,它是兩個表的公共屬性,也就是兩個表的公共關鍵字。
表3.2 2008級學生課程成績表

外關鍵字:也稱為外鍵或外碼,它是由一個表中的一個屬性或多個屬性所組成的。外關鍵字能表示另一個表的主關鍵字,實際上外關鍵字本身只是主關鍵字的備份,它是公共關鍵字。使用外關鍵字來描述表和表之間的聯系。一個表不一定有外關鍵字,而且外關鍵字的值也不一定是唯一的。它允許有重復值,也允許為空值(NULL)。
● 替代主鍵的唯一約束:通過定義這種約束,將確保唯一值只能輸入到在約束中定義的一個或幾個列中。盡管很像前面講過的主鍵定義,但二者是不同的。唯一約束不是主鍵,但在唯一約束中定義的一個或幾個列也可能成為主鍵。此外,唯一約束能夠包含NULL值,但主鍵不能。不過,由于NULL被視為與列中任何其他值一樣,因此,當準備插入或更新數據時,必須使構成唯一約束的列保持唯一,從而只允許有一個NULL值。最后,一個表可以有多個唯一約束,但只能有一個主鍵。
1.關系模型的操作與完整性約束
關系數據模型的操作主要包括查詢、插入、刪除和更新數據。這些操作必須滿足關系的完整性約束條件。關系的完整性約束條件包括三大類:實體完整性、參照完整性和用戶定義的完整性。關系模型中的數據操作是集合操作,操作對象和操作結果都是關系,即若干記錄的集合。關系模型把存取路徑向用戶隱藏起來,用戶只要指出“干什么”,不必詳細說明“怎么干”,從而大大提高了數據的獨立性,提高了用戶的工作效率。關系數據庫標準語言是SQL語言。
2.關系模型的優、缺點
關系數據模型的優點如下:
● 關系模型是建立在嚴格的數學概念基礎上的,無論實體還是實體之間的聯系都用關系來表示,數據的查詢結果也是關系(表),因此,概念單一,數據結構簡單、清晰。
● 關系模型的存取路徑對用戶透明,從而具有更高的數據獨立性、更好的安全保密性,也簡化了程序員的工作和數據庫的開發工作。
關系數據模型的缺點:由于存取路徑對用戶透明,查詢效率往往不如非關系數據模型。因此,為了提高性能,必須對用戶的查詢請求進行優化,從而增加了另外開發數據庫管理系統的負擔。
3.2 關系數據庫設計——實體與關系
在上一節中我們學習了數據庫設計中數據模型的發展過程和關系數據模型的基本概念、特點。對于關系型數據庫來說,它就是立足于關系數據模型,描述實體之間的關系。因此本節將針對關系型數據模型討論實體與關系的聯系。
3.2.1 實體
客觀存在并可相互區別的事物稱為實體。例如,圖書、教師等都是實體。常常將實體具有的某種特性稱為實體的屬性。例如,可以用若干個屬性(圖書編號、ISBN號、定價、出版社)來描述圖書實體,屬性的具體取值稱為屬性值。
實體表示的是一類事物,其中的一個具體事物稱為該實體的一個實例。例如“ABC11700 4”,“史記(3冊)”,“72.00”,“中國長安”則具體表示了一本書,它是圖書實體的一個實例。如果某個屬性或屬性的組合能唯一地標識出實體中的每一行,則可以選擇該屬性或屬性的組合作為實體標識符。
例如,圖書實體中的“ISBN號”可以作為實體標識符,因為“ISBN號”的值是唯一的,它能唯一地標識出實體中的每一行。而“書名”不可以作為圖書實體的實體標識符,因為“書名”有重名的現象存在,它所標識的行會出現不唯一的情況。
3.2.2 實體間的聯系
實體不是孤立的,實體與實體之間有著密切的聯系。實體間的聯系分為1對1、1對多和多對多3種。例如,學校實體和學生實體之間是1對多的聯系,學生實體和課程實體之間是多對多的聯系。可以使用實體關系圖(E-R圖)描述實體與實體間的聯系。如圖3.2所示,兩個實體之間有3種聯系(1:1、1:n和m:n)。

圖3.2 E-R圖
3.2.3 E-R模型
數據庫設計就是將現實世界的數據組織成數據庫管理系統所需的數據模型。實體聯系方法簡單、實用,通常使用它的工具——E-R圖來描述現實世界的信息結構,并將所描述的結果稱為E-R模型。E-R模型可以轉換為DBMS所支持的數據模型。如圖3.2所示,E-R圖有以下3個要素。
● 實體:使用矩形框表示,框內標注實體名稱。
● 屬性:使用橢圓形框表示,并用連線與實體連接起來。如果屬性較多,為使圖形更加簡明,有時也將實體與其屬性單獨用列表表示。
● 實體之間的聯系:使用菱形框表示,框內注明聯系名稱,并用連線將菱形框分別與有關實體相連,并在連線上注明聯系類型。
3.3 關系數據庫設計——范式與規范化
通過E-R模型能夠對實體與關系之間進行基本的映射,開始關系型數據庫的設計。但是,還有一個很重要的問題,關系模型要求關系必須是規范化的,即要求關系模型必須滿足一定的規范條件,即本節中將要學習到的范式。
3.3.1 規范化與范式
數據庫的規范化是減少表中數據重復的一種技巧。規范化過程針對已經發現的實體和屬性,將它們改造得更適合關系數據庫系統。該過程減掉冗余,并且將數據改造成有利于關系型引擎發揮作用的形式,大量消除重復數據后將得到更小、更緊湊的數據庫。這樣將減小出現混亂的幾率,并且將減少實時更新多列數據的開銷。
一旦完成了規范化過程,使用基于集的SQL語言來操作數據會更方便。對數據庫定義來說,其終極目標就是將自己識別出來的很多數據分解為原子值(原子值是指就用于關系數據庫而言,一個值已經沒必要被進一步分解了)。也就是說,分解到需要用T-SQL(Transact SQL)代碼訪問的最底層形式上。
規范化過程基于一系列級別,其中每個級別都達到一定水平的正確性,或遵守著一系列特定“規則”,這些規則通常稱為“范式”。設計范式(范式,數據庫設計范式,數據庫的設計范式)是符合某一種級別的關系模式的集合。構造數據庫必須遵循一定的規則。在關系數據庫中,這種規則就是范式。
關系數據庫中的關系必須滿足一定的要求,即滿足不同的范式。目前關系數據庫有6種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。滿足最低要求的范式是第一范式(1NF),在第一范式的基礎上進一步滿足更多要求的稱為第二范式(2NF),其余范式以此類推。一般說來,數據庫只需滿足第三范式(3NF)就行了。
3.3.2 第一范式(1NF)
在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。所謂第一范式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體。新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。
在第一范式(1NF)中表的每一行只包含一個實例的信息。例如,對于員工信息,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一范式就是無重復的列,如圖3.3所示。

圖3.3 第一范式
3.3.3 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被唯一地區分。為實現區分,通常需要為表加上一個列,以存儲各個實例的唯一標識。
第二范式(2NF)要求實體的屬性完全依賴于主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性。如果存在,那么這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。簡而言之,第二范式就是非主屬性非部分依賴于主關鍵字。
假定設計學生管理數據庫,其中包含選課關系表為SelectCourse(學號,姓名,年齡,課程名稱,成績,學分),關鍵字為組合關鍵字(學號,課程名稱),因為存在如下決定關系:
(學號,課程名稱)→(姓名,年齡,成績,學分)
所以,這個數據庫表不滿足第二范式,因為存在如下決定關系:
(課程名稱)→(學分) (學號)→(姓名,年齡)
即存在組合關鍵字中的字段決定非關鍵字的情況。由于不符合2NF,所以這個關系表會存在如下問題:
1.數據冗余
同一門課程由n個學生選修,“學分”就重復n-1次;同一個學生選修了m門課程,“姓名”和“年齡”就重復了m-1次。
2.更新異常
若調整了某門課程的學分,數據表中所有行的“學分”值都要更新,否則會出現同一門課程學分不同的情況。
3.插入異常
假設要開設一門新的課程,暫時還沒有人選修。這樣,由于還沒有“學號”關鍵字,課程名稱和學分也無法記入數據庫。
4.刪除異常
假設一批學生已經完成課程的選修,這些選修記錄就應該從數據庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。
把選課關系表SelectCourse改為如下3個表:
學生:Student(學號,姓名,年齡); 課程:Course(課程名稱,學分); 選課關系:SelectCourse(學號,課程名稱,成績)。
這樣的數據庫表是符合第二范式的,消除了數據冗余、更新異常、插入異常和刪除異常。另外,所有單關鍵字的數據庫表都符合第二范式,因為不可能存在組合關鍵字。
3.3.4 第三范式(3NF)
滿足第三范式(3NF)必須先滿足第二范式(2NF)。第三范式(3NF)要求一個數據庫表中不包含已在其他表中已包含的非主關鍵字信息。簡而言之,第三范式就是屬性不依賴于其他非主屬性。在第二范式的基礎上,如果數據表中不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴,則符合第三范式。所謂傳遞函數依賴,指的是如果存在“A→B→C”的決定關系,則C傳遞函數依賴于A。因此,滿足第三范式的數據庫表應該不存在如下依賴關系:
關鍵字段→非關鍵字段x→非關鍵字段y
假定學生管理數據庫中學生關系表為Student(學號,姓名,年齡,所在學院,學院地點,學院電話),關鍵字為單一關鍵字“學號”,因為存在如下決定關系:
(學號)→(姓名,年齡,所在學院,學院地點,學院電話)
所以,這個數據庫是符合2NF的,但是不符合3NF,因為存在如下決定關系:
(學號)→(所在學院)→(學院地點,學院電話)
即存在非關鍵字段“學院地點”、“學院電話”對關鍵字段“學號”的傳遞函數依賴。
它也會存在數據冗余、更新異常、插入異常和刪除異常的情況。把學生關系表分為如下兩個表:
學生:(學號,姓名,年齡,所在學院); 學院:(學院,地點,電話)。
這樣的數據庫表是符合第三范式的,它消除了數據冗余、更新異常、插入異常和刪除異常。
3.3.5 其他范式與規范化的好處
除了最常用的第一范式、第二范式和第三范式外,還有不太常用的如下幾種范式:
● BCNF范式,指非主鍵字段必須依賴于整個主鍵字。在第三范式的基礎上,數據庫表中如果不存在任何字段對任一候選關鍵字段的傳遞函數依賴則符合BCNF。
● 第四范式,用于處理由復雜的復合主鍵所導致的問題。如果將兩個相互獨立的屬性與第三個屬性一起組合為一個主鍵,并且如果沒有第三個屬性,僅靠這兩個屬性不能在實體中真正地起到唯一標識的作用,那么它就違反了第四范式。
● 第五范式,要求能從由原始表分解和轉換而得的新表中精確重建出原始表。利用第五范式可以確定在分解和轉換過程中是否有數據丟失。
每個級別的規范化都表明在更高程度上遵守了被廣泛認可的數據庫設計標準。當提高了自己數據的規范化程度時,你將逐漸很自然地創建出越來越多的寬度更窄的表(列更少)。通過這些規范化措施,能夠在數據庫的設計中達到如下目的。
1.消滅重復數據
任何一個數據,只要在數據庫中出現了一次以上,就隨時都有可能出錯。毫無疑問,以姓名為例,對于任何搬到一個新地址的人來說,存儲冗余數據的問題都顯而易見。各個政府機關分別要求搬到新地址的市民修改地址信息,如稅單、駕照、機動車登記等,沒有一個統一的、修改一次就行的地方。搬一次家簡單,但更新這些數據卻是個復雜的過程。
2.避免編寫不必要的代碼
如果數據結構糟糕,則可能需要在觸發器、存儲過程中,甚至是在業務邏輯層中進行多余的編程,而這又會進一步嚴重地損害性能。由于需要錯綜復雜的代碼來維護冗余數據,多余的代碼增加了引入新缺陷的可能性。
3.給表瘦身
更瘦的表就意味著在數據庫一個給定的頁上可以放入更多的數據,比起更胖的表來,在一次單獨的讀取操作中,數據庫服務器就可以從表中獲取更多的行。但這所有的一切意味著當結束規范化過程時,系統中會有更多的表。
4.最大化聚集索引的使用
在SQL Server 2008中,對表排序是聚集索引的內生特性。聚集索引是一類特殊的索引,因為數據的物理存儲與索引數據的順序一致,這就使得用索引進行查詢有更好的性能。通常情況下,用聚集索引來將表排序成方便使用的形式,從而增強性能。每張表只能有唯一一個聚集索引。數據庫中的聚集索引越多,就越不需要進行排序操作,然后就可以非常快地連接大量的數據集。
5.降低每張表中索引的數量
每張表中的索引越少,維護索引所需要做的工作就越少。在SQL Server中,數據和索引分開存放在8KB的頁上。通常情況下,任何時候SQL Server都無法在RAM中保持整個數據庫。數據庫保持最近被看過的東西的“快照”。為了造成整個數據庫都在內存中的印象,當需要時,SQL Server在高速訪問存儲空間內對數據頁進行搬入、搬出操作。但是,這個空間在任意一個時間點上包含的頁數量都有限。
因此,SQL Server對數據進行搬入、搬出該空間的操作時,其原則是最常訪問到的數據在空間中保持不動。所以,為了盡可能保持高性能,我們的目標是要最小化需傳輸的物理頁。規范化要做的就是給表瘦身,讓表針對特定問題,而不是讓表去處理很多列。因此,它有助于將列數量保持在一個最低水平上。
3.3.6 非規范化
需要注意的是,規范化也可能會影響數據庫及數據檢索的速度,因此數據庫設計者不可能無度地規范化。對數據庫進行合理而有益的規范化,重復數據的消除將帶來更快的數據排序速度,查詢也將運行得更快,從而改善性能。但是,也可能會由于創建了太多的關系和太多狹小的表,導致過分規范化數據,以致檢索一條信息需要訪問許多的表并在這些表之間產生許多連接。
非規范化與規范化完全相反,此時要在表中引入數據冗余,以減少表連接的數目,潛在地加速數據訪問。盡管使數據規范化會帶來更高的效率,但是,有時使數據非規范化反而是更好的選擇。不要只因為別人認為數據應該徹底規范化就這樣去做,具體如何應該根據需要而定。
盡管使數據非規范化的缺點很多,它將會帶來重復和多余的信息(這些信息可以通過規范化放置在另一個表中,然后在查詢時連接表即可)。這既會產生性能問題,又要占用較大的數據存儲空間。然而,如果查詢運行速度提高了,那么進行使數據非規范化所付出的代價也算是合理的。但當系統中最重要的是數據完整性時,使數據非規范化將毫無意義,因為這樣會導致數據重復,進而當需要對數據做修改時,一個地方的數據已經更新,而另一個地方的數據尚未更新。
3.4 SQ L Server 2008的預設數據庫
每個SQL Server都包含兩種類型的數據庫:系統數據庫和用戶數據庫。系統數據庫存儲有關SQL Server的信息,SQL Server使用系統數據庫來管理系統,例如,下面將要介紹的master數據庫、model數據庫、msdb數據庫和tempdb數據庫等;而用戶數據庫由用戶來建立,如圖書管理信息數據庫,SQL Server可以包含一個或多個用戶數據庫。
3.4.1 master數據庫
如圖3.4所示,master(控制)數據庫是SQL Server 2008中的總控數據庫。它是最重要的系統數據庫,記錄系統中所有系統級的信息。它對其他的數據庫實施管理和控制的功能,同時該數據庫還保存了用于SQL Server 2008管理的許多系統級信息。master數據庫記錄所有的登錄賬戶和系統配置,它始終有一個可用的最新master數據庫備份。

圖3.4 master數據庫
由此可知,如果在計算機上安裝了一個SQL Server系統,那么系統首先會建立一個master數據庫來記錄系統的有關登錄賬戶、系統配置、數據庫文件等初始化信息。如果用戶在這個SQL Server系統中建立一個用戶數據庫(如圖書管理系統數據庫),系統馬上將用戶數據庫的有關用戶管理、文件配置、數據庫屬性等信息寫入master數據庫。系統正是根據master數據庫中的信息來管理系統和其他數據庫的。因此,如果master數據庫信息被破壞,整個SQL Server系統將受到影響,用戶數據庫將不能被使用。
3.4.2 tempdb數據庫
使用SQL Server 2008系統時,經常會產生一些臨時表和臨時數據庫對象等。例如,用戶在數據庫中修改表的某一行數據時,在修改數據庫這一事務沒有被提交的情況下,系統內就會有該數據的新、舊版本之分,往往修改后的數據表構成了臨時表。所以系統要提供一個空間來存儲這些臨時對象。如圖3.5所示,tempdb數據庫保存所有的臨時表和臨時存儲過程。tempdb數據庫是全局資源,所有連接到系統的用戶的臨時表和存儲過程都被存儲在該數據庫中。
tempdb數據庫是臨時數據庫,在SQL Server 2008每次啟動時都被重新創建,因此該數據庫在系統啟動時總是空的,上一次的臨時數據庫都被清除掉了。臨時表和存儲過程在連接斷開時自動清除,而且當系統關閉后將沒有任何連接處于活動狀態,因此tempdb數據庫中沒有任何內容會從SQL Server的一個啟動工作保存到另一個啟動工作之中。默認情況下,在SQL Server 2008運行時,tempdb數據庫會根據需要自動增長。不過,與其他數據庫不同,每次啟動數據庫引擎時,它會重置初始大小。

圖3.5 tempdb數據庫
3.4.3 model數據庫
model(模板)數據庫為用戶新創建的數據庫提供模板和原型,它包含了用戶數據庫中應該包含的所有系統表的結構。當用戶創建數據庫時,系統會自動把model數據庫中的內容復制到新建的用戶數據庫中。熟悉Microsoft Word的用戶都會有這樣的體會,當修改了文檔的頁面設置,并把該設置作為默認設置保存起來時,在此次之后新建的任何文檔的格式都會默認為該設置格式。也就是說,在把被修改過的頁面設置作為默認保存的同時,也就修改了Microsoft Word中基于所有新建文檔的Normal模板,用戶在系統中新創建的所有數據庫的內容,最初都與該模板數據庫具有完全相同的內容。
3.4.4 msdb數據庫
msdb數據庫供SQL Server 2008代理程序調度警報作業及記錄操作時使用。當很多用戶在使用一個數據庫時,經常會出現多個用戶對同一個數據的修改而造成數據不一致的現象,或是用戶對某些數據和對象的非法操作等。為了防止上述現象的發生,SQL Server中有一套代理程序能夠按照系統管理員的設定監控上述現象的發生,及時向系統管理員發出警報。那么當代理程序調度警報作業、記錄操作時,系統要用到或實時產生許多相關信息,這些信息一般存儲在msdb數據庫中。
3.4.5 AdventureW orks和AdventureWorksDW示例數據庫
AdventureWorks和AdventureWorksDW是SQL Server 2008中的示例數據庫(需要在安裝過程中選擇安裝)。這些數據庫基于一個自行車生產公司,以一種簡單的、易于理解的方式來展示SQL Server 2008的新功能,如Reporting Services、CLR(公共語言運行時)特性及許多其他特性。
AdventureWorks示例數據庫虛構了Adventure Works Cycles公司,該公司是一家大型跨國生產公司。公司生產金屬和復合材料的自行車,產品銷往北美、歐洲和亞洲市場。公司總部位于華盛頓州的伯瑟爾市,有290名雇員,公司還擁有一些遍及其銷售市場的地區性銷售團隊。盡管示例數據庫不是為SQL Server 2008新手準備的,但在學習完SQL Server 2008基礎知識后,使用它們也不會有困難。
3.5 使用SQL Server 2008創建數據庫
在一個SQL Server 20 08系統中,有多種方法可以創建用戶數據庫。一種是使用第2章中介紹的SQL Server Management Studio對象資源管理器創建數據庫;另一種是使用Transact-SQL命令創建數據庫,它可以把創建數據庫的腳本保存下來,在其他計算機上運行以創建相同的數據庫。
此外,利用系統提供的創建數據庫向導也可以創建數據庫。創建用戶數據庫之前,必須先確定數據庫的名稱、數據庫所有者、初始大小、數據庫文件增長方式、數據庫文件的最大允許增長的大小,以及用于存儲數據庫的文件路徑和屬性等。下面分別介紹這兩種創建數據庫的方法。
3.5.1 使用SQL Server Management Studio對象資源管理器創建數據庫
使用SQL Server Management Studio對象資源管理器創建數據庫步驟如下:
(1)在【開始】菜單中選擇【所有程序】|【Microsoft SQL Server 2008】|【SQL Server Management Studio】命令,打開SSMS,如圖3.6所示。

圖3.6 SSMS初始狀態
(2)在SSMS左側的【對象資源管理器】窗口的【數據庫】分支上單擊鼠標右鍵,從彈出的快捷菜單中選擇【新建數據庫】命令,彈出【新建數據庫】窗口,如圖3.7所示。

圖3.7 【新建數據庫】窗口
(3)在【數據庫名稱】文本框中輸入創建的數據庫名稱“wj”。此時,系統會以數據庫名稱做為前綴創建主數據庫文件和事務日志文件,如wj和wj_log。主數據庫文件和事務日志文件的初始大小與model系統數據庫指定的默認大小相同,選擇默認值,其中數據庫文件的增量為1MB,不限制增長的總量,日志文件每次增長10%,也不限制增長的總量。也可以進行自定義,單擊【自動增長】旁的按鈕,彈出如圖3.8所示的對話框。

圖3.8 【更改自動增長設置】對話框
對文件增長設置,如圖3.8所示,其中文件增長有兩種自動增長方式。
● 【按百分比】:指定每次增長的百分比。
● 【按MB】:指定每次增長的兆字節數。
用戶也可以指定最大文件大小,如果選中【不限制文件增長】單選按鈕,那么數據文件的容量可以無限地增大;如果選中【限制文件增長】單選按鈕,可以將數據文件限制在某一特定的數量范圍以內,一般,有經驗的數據庫管理員會預先估計數據庫的大小,當然這樣做需要一定的技巧,需要不斷地積累經驗。同樣可以對數據庫文件和數據庫邏輯文件的存放路徑進行修改。默認情況下,SQL Server 2008將存放路徑設為安裝目錄下的data目錄下。用戶可以根據管理需要進行修改,單擊【路徑】旁的按鈕,彈出窗口,此時可以修改路徑,如圖3.9所示。

圖3.9 存放路徑選擇
如果需要為該數據庫添加所有者,則單擊【添加】按鈕,彈出【選擇數據庫所有者】對話框,如圖3.10所示。在該對話框中,可以單擊【瀏覽】按鈕選擇瀏覽數據庫所在計算機上的用戶名,并添加為數據庫的所有者。

圖3.10 【選擇數據庫所有者】對話框
在【選項】界面可以設置數據庫的一些選項,如圖3.11所示。在各屬性的下拉列表框中可以做出選擇。

圖3.11 【選項】界面
完成所有設置后,在如圖3.8所示的窗口中單擊【確定】按鈕,完成數據庫創建,如圖3.12所示。

圖3.12 完成數據庫創建的對象資源管理器窗口
3.5.2 使用SQL Server Management Studio查詢窗口創建用戶數據庫
使用SQL查詢分析器創建數據庫,其實就是在查詢窗口的編輯面板中使用DATABASE等Transact-SQL命令來創建用戶數據庫。
【范例3-1】下面學習一個創建用戶數據庫test的簡單例子。
CREATE DATABASE test --創建名為test的數據庫,數據庫的命名規則按照標識符的使用規則 ON PRIMARY ( NAME= 'test', --指定建立數據庫對應的邏輯名字 FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL\data\test.mdf', --指定用于存放數據庫部分的磁盤文件,路徑必須指定為SQL Server所安裝服務器上的某個文件夾 SIZE=10240KB, --指定數據庫文件的初始大小,用戶可以以MB為單位指定大小,也可以使用單位KB來指定大小 --當添加數據或日志文件時,其默認大小是1 MB MAXSIZE = UNLIMITED, FILEGROWTH = 10%) LOG ON --指定建立數據庫對應的日志文件 ( NAME='test_log', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL\data\test_log.ldf', --指定用于存放數據庫日志部分的磁盤文件,路徑必須指定為SQL Server所安裝服務器上的某個文件夾 SIZE=1024KB, --指定數據庫日志文件的初始大小,用戶可以以MB為單位指定大小,也可以使用單位KB來指定大小 --當添加數據或日志文件時,其默認大小是1 MB MAXSIZE = 5120KB, FILEGROWTH = 1024KB ) GO
【代碼解析】
● PRIMARY參數用來在主文件組中指定文件。主文件組中包含所有數據庫的系統表,還包含所有未指派給用戶文件組的對象。主文件組的第一個logical_file_name稱為主文件,該文件包含數據庫的邏輯起點及其系統表。一個數據庫只能有一個主文件。如果指定PRIMARY,那么CREATE DA TABASE語句中有一個主文件。如果沒有指定PRIMARY,那么CREATE DATABASE語句中列出的第一個文件將成為主文件。
● MAXSIZE參數指定文件能夠增長到的最大長度。默認單位為KB,用戶也可以以MB來指定該長度。如果沒有指定長度或設定為UNLIMITED時,文件將一直增長,直到磁盤滿為止。要建立的數據庫大小單位為MB。
● FILEGROWTH參數指定文件的增長增量。該參數設置不能超過MAXSIZE參數。指定值的默認單位為MB,用戶也可以以KB為單位進行指定,此外還可以使用百分比設定。如果該參數沒有指定,則默認為10%,最小值為64KB。在查詢編輯器窗口中輸入上述代碼,單擊【執行】按鈕完成查詢,即完成test用戶數據庫的新建工作。
注意:使用CREATE DATABASE語句即可創建數據庫及存儲該數據庫的文件。SQL Server 2008分兩步來實現CREATE DATAB ASE語句。首先,SQL Server 2008使用model數據庫的副本初始化數據庫及其源數據;然后SQL Server 2008使用空頁填充數據庫的剩余部分,每個新數據庫都從model數據庫中繼承數據庫選項設置。
【運行結果】
執行結果如圖3.13所示。

圖3.13 使用T-SQL代碼新建數據庫
3.5.3 查看和修改數據庫屬性
對于已有的數據庫,可以分別利用對象資源管理器和Transact-SQL語句來查看數據庫信息。
1.使用SQL Server Management Studio窗口中的對象資源管理器查看數據庫信息
在完成數據庫創建后,可以對數據庫的屬性進行進一步設置。在對象資源管理器窗口中選擇新建的wj數據庫的【wj】分支,在其上單擊鼠標右鍵,從彈出的快捷菜單中選擇【屬性】命令,彈出【數據庫屬性】窗口,如圖3.14所示。在該窗口中可以對數據庫屬性進行修改。例如,設置數據庫文件所屬的文件組時,在【數據庫屬性】窗口左側的分支中單擊【文件組】選項,如圖3.15所示。單擊【添加】按鈕,可以增加自定義名稱的文件組。

圖3.14 【數據庫屬性】窗口

圖3.15 設置數據庫文件所屬的文件組
在屬性頁窗口中列出了數據庫、備份和維護,以及空間配置等信息。數據庫本身的信息包括數據庫的所有者、創建日期、大小、可用空間、用戶數。
2.使用Transact-SQL命令查看數據庫信息
在Transact-SQL語句格式中,有許多查看數據庫信息的語句,例如,可以使用存儲過程sp_helpdb來顯示有關數據庫和數據庫參數的信息。如圖3.16所示的是使用存儲過程sp_helpdb對數據庫test進行屬性查詢,圖中顯示了該數據庫的所有者、狀態、創建時間、文件尺寸、文件增長屬性等數據庫信息,其命令格式為:sp_helpdb 'test'。

圖3.16 使用sp_helpdb存儲過程查看test數據庫屬性
3.6 使用SQL Server 2008管理數據庫
本節學習使用SQL Server 2008完成數據庫打開、修改、增加和縮減等管理工作。
3.6.1 打開數據庫
當用戶登錄SQL Server 2008服務器,連接SQL Server 2008后,用戶需要連接SQL Server 2008服務器中的某個數據庫,才能使用該數據庫中的數據。如果用戶沒有預先指定連接哪個數據庫,SQL Server 2008會自動連接上master系統數據庫。一般地,用戶需要指定連接SQL Server 2008服務器中的哪個數據庫,或者從一個數據庫切換至另一個數據庫,可以在查詢分析器的【編輯】面板中利用use命令來打開或切換至不同的數據庫。
打開或切換數據庫的命令如下:
USE database name
其中,database name表示需要打開或切換的數據庫名稱。
3.6.2 修改、增加和縮減數據庫容量
當數據庫的數據增長到要超過它的使用空間時,必須加大數據庫的容量。增加數據庫容量就是給它提供額外的設備空間。同時,如果在新建數據庫時指定給某數據庫過多的設備空間,可以通過縮減數據庫容量來減少設備空間的浪費。增加和縮減數據庫容量的方法一般有兩種,即用Transact-SQL命令和利用SQL Server Management Studio查詢窗口中的【對象資源管理器】面板來增縮數據庫容量。
1.在SQL Server Management Studio查詢窗口中使用Transact-SQL語句增縮數據庫容量
擴增數據庫語句格式如下:
USE database name --需要修改的數據庫名 Go ALTER DATABASE database name -- database name是需要調整大小的數據庫的名稱 MODIFY FILE ( NAME=file name, --需要增加容量的數據庫的物理文件的路徑 SIZE=newsize --為數據庫文件指定新的容量尺寸,該容量必須大于現有數據庫的空間 )
【范例3-2】將新創建的test數據庫的大小調整為20MB。
修改大小的示例代碼如下:
USE test Go ALTER DATABASE test MODIFY FILE ( NAME='C:\Program Files\Microsoft SQL Server\MSSQL\data\test.mdf', SIZE=20 )
縮減數據庫一般通過執行DBCC SHRINKDATABASE命令來完成,其語句格式如下:
DBCC SHRINKDATABASE (database_name[,new_size[,'MASTEROVERRIDE']])
其中,
● database_name:想縮減的數據庫名稱。
● new_size:縮減數據庫后剩余多少容量。假如不指定,那么數據庫將縮減至最小的容量。
如下所示為縮減數據庫的示例代碼,將test數據庫縮減至最小容量。
USE test GO DBCC SHRINKDATABASE ('test')
【運行結果】
執行結果如圖3.17所示。

圖3.17 縮減test數據庫容量
2.在SQL Server Management Studio對象資源管理器中修改數據庫
進入SQL Server Management Studio窗口,在要修改的數據庫【wj】分支項單擊鼠標右鍵,在彈出的快捷菜單中選擇【屬性】命令,進入屬性窗口,在這些選項的展開頁面中可以管理文件增長、擴展數據庫、縮小數據庫、修改文件(組)設置和增加新數據庫等。如圖3.18所示,將wj數據庫的大小修改為8MB。

圖3.18 修改wj數據庫容量
修改成功后,單擊【確定】按鈕,修改數據生效。
3.6.3 查看目前數據庫選項設定及修改
設定數據庫選項可以控制數據庫是單用戶使用模式還是db_owner模式,以及此數據庫是否僅可讀取等,可以設置此數據庫是否自動關閉、自動收縮和數據庫的兼容級別等選項。
如果想查看目前數據庫選項,如前兩節中已經討論的使用屬性窗口的方式,也可以在查詢分析器中使用Transact-SQL命令來查看和更改數據庫選項。一般使用sp_dboption存儲過程來查看數據庫選項,如下所示將數據庫test的屬性設置為只讀:
EXEC sp_dboption 'test', 'read only', True
如圖3.19所示是執行屬性設置后的結果。

圖3.19 將test數據庫屬性設置為只讀
下面簡單介紹部分選項參數。
1.trunc log on chkpt選項參數
trunc log on chkpt選項參數表示每當checkpoint檢查進程執行時(通常每分鐘12次以上),事務日志被載截,即將已提交的事務日志刪除。但是,該選項設置成true以后,人工執行checkpoint操作時都不載截事務日志。在開發數據庫應用時,為防止日志增長太快,可以將該選項設置成true,所以它很有用。
該參數的設置代碼如下:
EXEC sp_dboption 'test', 'trunc. log on chkpt.', True
2.dbo use only
dbo use only選項設置為true時,只有數據庫擁有者才能使用該數據庫。
該參數的設置代碼如下:
EXEC sp_dboption 'test', 'dbo use only',True
3.read only
read only選項使得用戶可以從數據庫中檢索數據,但不能修改數據。
該參數的設置代碼如下:
EXEC sp_dboption 'wj', 'read only', True
4.single user
single user選項設置為true時,每次只能有一個用戶訪問該數據庫。
該參數的設置代碼如下:
EXEC sp_dboption 'test', 'single user', True
5.offline
offline選項設置為true時,設定數據庫為離線,反之為在線。
該參數的設置代碼如下:
EXEC sp_dboption 'test', 'offline', True
6.autoshrink
autoshrink選項設置為true時,數據庫將自動地周期性收縮大小。
該參數的設置代碼如下:
EXEC sp_dboption 'test', 'autoshrink', True
7.ANSI warnings
ANSI warnings選項設置為true時,將提示“除0”之類的標準錯誤和警告。
該參數的設置代碼如下:
EXEC sp_dboption 'test', 'ANSI warnings', True
3.6.4 數據庫更名
通常情況下,在一個應用程序的開發過程中,往往需要改變數據庫的名稱,但是在SQL Server 200 8中更改數據庫名稱并不像在Windows中那樣簡單,要改變名稱的那個數據庫很可能正被其他用戶使用,所以變更數據庫名稱的操作必須在單用戶模式下方可進行,然后使用系統存儲過程sp_renamedb或直接更改來更改數據庫的名稱。首先將數據庫更改為單用戶模式,如圖3.20所示。

圖3.20 將test數據庫設置為單用戶模式
完成單用戶設置后,可以在對象資源管理器中直接對數據庫的名稱進行修改,如圖3.21所示,將test數據庫的名稱修改為test1。
下面再通過執行sp_renamedb存儲過程來進行更名操作。打開SQL查詢窗口,輸入如下語句:
EXEC sp_renamedb 'test1','test'
執行完成后,如圖3.22所示。

圖3.21 修改test數據庫的名稱

圖3.22 修改test1數據庫的名稱
3.6.5 刪除數據庫
刪除數據庫比較簡單,但是應該注意的是,如果某個數據庫正在使用時,則無法對該數據庫進行刪除。可以使用對象資源管理器和DROP DA TAHASE語句來刪除某個數據庫。首先直接使用對象資源管理器來進行數據庫的刪除,在對象資源管理器的【數據庫】分支中選擇要刪除的數據庫選項【test】選項。在該選項上單擊鼠標右鍵,在彈出的快捷菜單中選擇【刪除】命令,彈出如圖3.23所示的窗口,單擊【確定】按鈕,完成數據庫刪除。

圖3.23 使用對象資源管理器刪除test數據庫
也可以直接使用T-SQL代碼來完成數據庫的刪除,如圖3.24所示。

圖3.24 使用T-SQL代碼刪除test數據庫
DROP DATABASE test
在SQL Server Management Studio查詢分析器窗口中運行代碼,執行完畢后,SQL Server 2008將返回該數據庫的數據文件和日志文件均被刪除的提示信息。
如圖3.24,test數據庫已被刪除。
3.7 小結
本章學習了數據模型的概念和數據庫的創建與管理。本章的重點是掌握系統數據庫的分類和作用、學會使用對象資源管理器創建用戶數據庫、學會使用查詢分析器創建用戶數據庫、學會壓縮和擴充數據庫、學會查看和修改數據庫選項、學會給數據庫改名和刪除數據庫。難點是使用E-R模型設計數據庫和不同范式的理解。下一章將在此基礎上全面介紹Transact-SQL語言。
3.8 習題
【題目1】創建一個Test數據庫,該數據庫的主數據文件邏輯名稱為Test_data,物理文件名為Test.mdf,初始大小為10MB,最大尺寸為無限大,增長速度為10%;數據庫的日志文件邏輯名稱為Test_log,物理文件名為Test.ldf,初始大小為1MB,最大尺寸為5MB,增長速度為1MB,數據庫文件大小使用KB表示。
【分析】該試題是考查對于數據庫創建的理解,按照示例完成即可,要注意題目中對于所創建的數據庫的具體參數的要求。首先,在沒有指出文件創建位置時,在SQL的安裝文件夾創 建,例 如SQL Server 2008的 安 裝 路 徑 為“C:\Program Files\ Microsoft SQL Server\MSSQL.1\MSSQL\”,則創建于對應的data文件夾下。其次,注意數據庫文件的大小以KB表示,因此要正確使用換算關系。最大尺寸和增長速度采用和例子類似的方式即可。
【核心代碼】按照以上分析,構建以下核心代碼:
CREATE DATABASE Test ON PRIMARY ( NAME = 'Test', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\test.mdf', SIZE=10240KB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ) LOG ON ( NAME='Test_log', FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\test_log.ldf', SIZE=1024KB, MAXSIZE = 5120KB, FILEGROWTH = 1024KB ) GO
【題目2】創建一個名為“user”的用戶數據庫,其主文件大小為120MB,初始大小為55MB,文件增長增量為3MB;日志文件大小為30MB,初始大小為12MB,文件增長增量為3MB;其中文件均存儲在D盤根目錄下,數據庫文件大小使用KB表示。
【分析】與題目1相比,首先,要選擇不同的存放位置,例如可以直接存放在D盤的data文件夾中。其次,注意增長方式的變化,在本題中增長方式為一個固定值。
【核心代碼】按照以上分析,構建以下核心代碼:
CREATE DATABASE user ON PRIMARY ( NAME = 'user', FILENAME='D:\ \data\user.mdf', SIZE=56320KB, MAXSIZE =122880KB, FILEGROWTH = 30720KB, ) LOG ON ( NAME='user_log', FILENAME='D:\ user_log.ldf', SIZE=12288KB, MAXSIZE = 30720KB, FILEGROWTH = 3072KB ) GO
【題目3】使用3個100MB的數據文件和兩個100MB的事務日志文件創建名為Archive的數據庫。主文件是列表中的第一個文件,并使用PRIMARY關鍵字顯式指定。事務日志文件在LOG ON關鍵字后指定。注意FILENAME選項中所用的文件擴展名:主要數據文件使用.mdf,次要數據文件使用.ndf,事務日志文件使用.ldf,存放位置和其他參數自行指定,數據庫文件大小使用MB表示。
【分析】該試題是考查對于數據庫創建的理解。參數的指定和前兩題相同,區別在于本題使用的數據文件和事務日志文件為多個,因此要逐一進行列舉。
【核心代碼】按照以上分析,構建以下核心代碼:
CREATE DATABASE Archive ON PRIMARY ( NAME=Arch1, FILENAME='c:\program files\microsoft sql server\mssql.1\mssql\data\archdat1.mdf', SIZE= 100MB, MAXSIZE = 200, FILEGROWTH = 20 ), ( NAME= Arch2, FILENAME = 'c:\program files\microsoft sql server\mssql.1\mssql\data\archdat2.ndf', SIZE= 100MB, MAXSIZE = 200, FILEGROWTH = 20 ), ( NAME= Arch3, FILENAME = 'c:\program files\microsoft sql server\mssql.1\mssql\data\archdat3.ndf', SIZE= 100MB, MAXSIZE = 200, FILEGROWTH = 20 ) LOG ON ( NAME= Archlog1, FILENAME = 'c:\program files\microsoft sql server\mssql.1\mssql\data\archlog1.ldf', SIZE= 100MB, MAXSIZE = 200, FILEGROWTH = 20 ), ( NAME=Archlog2, FILENAME = 'c:\program files\microsoft sql server\mssql.1\mssql\data\archlog2.ldf', SIZE= 100MB, MAXSIZE = 200, FILEGROWTH = 20 ) GO
【題目4】將兩個數據文件和一個事務日志文件添加到Test數據庫中。
【分析】該試題是考查對于數據庫修改方法的理解。數據文件和事務文件的使用和上幾題類似,區別在于本題中是對現有數據庫的修改,因此需要使用ALTER DATABASE修改數據庫。
【核心代碼】按照以上分析,構建以下核心代碼:
ALTER DATABASE Test ADD FILE ( NAME= Test1, FILENAME='c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test1.ndf', SIZE= 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ), ( NAME= Test2, FILENAME='c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\test2.ndf', SIZE= 3MB, MAXSIZE = 10MB, FILEGROWTH = 1MB ) GO ALTER DATABASE Test ADD LOG FILE ( NAME= testlog1, FILENAME='c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\testlog1.ldf', SIZE= 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) GO
【題目5】使用T-SQL代碼將“user”用戶數據庫的大小分別擴展到300MB,并縮減到原始狀態。
【分析】該試題是考查對于數據庫修改方法的理解。與上題不同的是,本題中不是向數據庫中新增,而是對已有的數據庫進行修改,因此需使用MODIFY關鍵字。
【核心代碼】按照以上分析,構建以下核心代碼:
USE user Go ALTER DATABASE user MODIFY FILE ( NAME=' D:\ \data\user.mdf', SIZE=300MB )
【題目6】使用SSMS完成第5題的步驟。
【分析】該試題是考查對于SSMS修改數據庫屬性的方法的熟悉,參考前文內容進行。注意,正確打開SSMS,并選擇對應的數據庫,通過修改【屬性】對話框中的值來完成修改。
【題目7】使用T-SQL代碼將“user”用戶數據庫的大小縮減到50MB。
【分析】該試題是考查對于數據庫修改方法的理解。對于數據庫文件的縮減,關鍵就在于DBCC關鍵字的使用,然后要正確設定縮減后的數據庫大小。
【核心代碼】按照以上分析,構建以下核心代碼:
USE user GO DBCC SHRINKDATABASE ('user') 50MB
【題目8】使用SSMS完成第7題的步驟。
【分析】該試題是考查對于SSMS修改數據庫屬性的方法的熟悉,參考前文內容進行。注意,正確打開SSMS,并選擇對應的數據庫,通過修改【屬性】對話框中的值來完成修改。
【題目9】使用T-SQL代碼將“user”用戶數據庫設為單用戶。
【分析】該試題是考查對于數據庫修改方法的理解。注意使用sp_dboption系統過程完成設置工作。
【核心代碼】按照以上分析,構建以下核心代碼:
EXEC sp_dboption 'user', 'single user', True
【題目10】使用SSMS完成第9題的步驟。
【分析】該試題是考查對于SSMS修改數據庫屬性的方法的熟悉,參考前文內容進行。注意,正確打開SSMS,并選擇對應的數據庫,通過修改【屬性】對話框中的值來完成修改。
【題目11】使用T-SQL代碼修改“user”用戶數據庫的名稱。
【分析】該試題是考查對于數據庫名稱變更方法的理解。注意使用sp_renamedb系統過程完成設置工作。
【核心代碼】按照以上分析,構建以下核心代碼:
EXEC sp_renamedb 'user','user1'
【題目12】使用SSMS完成第11題的步驟。
【分析】該試題是考查對于數據庫名稱變更方法的理解,參考前文內容進行。注意,正確打開SSMS,并選擇對應的數據庫,通過修改【屬性】對話框中的值來完成修改。
【題目13】使用T-SQL代碼刪除“user”用戶數據庫。
【分析】該試題是考查對于數據庫刪除方法的理解。注意使用DROP關鍵字。
【核心代碼】按照以上分析,構建以下核心代碼:
DROP DATABASE user
【題目14】使用SSMS完成第13題的步驟。
【分析】該試題是考查對于數據庫刪除方法的理解,參考前文內容進行。注意,正確打開SSMS,并選擇對應的數據庫,通過修改【屬性】對話框中的值來完成修改。
【題目15】使用向導創建一個數據庫學生成績數據庫Stu_Score。要求數據庫增量為3MB,不限制增長總量,按照百分比增長。
【分析】該試題是進一步考查對于數據庫創建的理解,同時為后面的進一步應用提供數據庫基礎。按照示例完成即可,要注意題目中對于所創建的數據庫的具體參數的要求。
【核心代碼】參照前面的習題。
【題目16】在題目15的基礎上,使用T-SQL命令修改數據庫容量為30MB。
【分析】該試題是考查對于數據庫創建的理解,按照示例完成即可,要注意題目中對于所創建的數據庫的具體參數的要求。
【核心代碼】參照前面的習題。
【題目17】在題目1的基礎上,使用向導修改數據庫容量為20MB。
【分析】該試題是考查對于數據庫修改方法的理解,參考前文內容進行。
【題目18】將題目15中創建的數據庫名稱改為Score。
【分析】該試題是考查對于數據庫名稱變更的理解。
【核心代碼】參照前面的習題。
【題目19】使用向導刪除學生成績數據庫Score。
【分析】該試題是考查對于數據庫刪除方法的理解,參考前文內容進行。
【題目20】假設某公司的業務規則如下:
(1)公司下設幾個部門,如技術部、財務部、市場部等。
(2)每個部門承擔多個工程項目,每個工程項目屬于一個部門。
(3)每個部門有多名職工,每一名職工只能屬于一個部門。
(4)一個部門可能參與多個工程項目,且每個工程項目有多名職工參與施工。根據職工在工程項目中完成的情況發放酬金。
(5)工程項目有工程號、工程名兩個屬性;部門有部門號、部門名稱兩個屬性;職工有職工號、姓名、性別屬性。
要求回答以下問題:
● 根據上述規則設計E-R模型。
● 將E-R模型轉換成關系數據模型,并指出每個關系的主鍵和外鍵。
【分析】對于E-R模型的設計,首先要確定實體是什么。對于本題來說,根據題面(5)的描述,實體包括部門、工程項目和職工。接下來要確定實體的屬性,這些在題面(5)中也給出得非常清楚。最后要判定模型中的關系,也就是所謂的R,那么從題面(2)到題面(4)可以看出來,部門和職工間是1到N的對應關系,同時部門和工程項目之間也是1到N的對應關系。
(1)E-R模型如下:

(2)對應的關系數據模型如下:
● 部門(部門號,部門名稱),其中部門號是主鍵。
● 職工(職工號,姓名,性別),其中職工號是主鍵。
● 工程項目(工程號,工程名),其中工程號是主鍵。
● 隸屬(部門號,職工號,職位),其中部門號和職工號既是它的主鍵也是它的外鍵。
● 承擔(部門號,工程號,起始時間),其中部門號和工程號既是它的主鍵也是它的外鍵。
【題目21】學生運動會模型:
(1)有若干班級,每個班級包括:班級號、班級名、專業、人數。
(2)每個班級有若干運動員,運動員只能屬于一個班,包括:運動員號、姓名、性別、年齡。
(3)有若干比賽項目,包括:項目號、名稱、比賽地點。
(4)每名運動員可參加多項比賽,每個項目可有多人參加。
(5)要求能夠公布每個比賽項目的運動員名次與成績。
(6)要求能夠公布各個班級團體總分的名次和成績。
要求回答以下問題:
● 畫出每個實體及其屬性關系、實體間實體聯系的E-R圖。
● 根據試題中的處理要求:完成數據庫邏輯模型,包括各個表的名稱和屬性,并指出每個表的主鍵和外鍵。
【分析】對于E-R模型的設計,首先要確定實體是什么。對于本題來說,根據題面(1)~(3)的描述,實體包括班級、運動員和項目。接下來要確定實體的屬性,這些在題面中也給出得非常清楚。最后要判定模型中的關系,也就是所謂的R,那么從題面(2)~(4)可以看出,班級和運動員間是1到N的對應關系,同時運動員和項目之間是多到多的對應關系。
(1)E-R模型如下:

(2)邏輯模型如下:
● 班級(班級號,班級名,專業,人數)主鍵:班級號
● 運動員(運動員號,姓名,性別,年齡,班級號)主鍵:運動員號外鍵: 班級號
● 項目(項目號,項目名,比賽地點)主鍵:項目號
● 比賽(運動員號,項目號,成績,名次,得分)主鍵:運動員號,項目號外鍵:運動員號,項目號
- 我們都是數據控:用大數據改變商業、生活和思維方式
- 計算機組成原理與接口技術:基于MIPS架構實驗教程(第2版)
- Greenplum:從大數據戰略到實現
- Google Visualization API Essentials
- Python數據分析入門:從數據獲取到可視化
- 業務數據分析:五招破解業務難題
- Learn Unity ML-Agents:Fundamentals of Unity Machine Learning
- Remote Usability Testing
- gnuplot Cookbook
- INSTANT Apple iBooks How-to
- Splunk智能運維實戰
- Solaris操作系統原理實驗教程
- 數據庫技術及應用
- Hadoop 3實戰指南
- Mastering ROS for Robotics Programming(Second Edition)