版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3.1數(shù)據庫設計方法
3.2數(shù)據庫設計過程
3.3SQLServer數(shù)據庫系統(tǒng)
3.4創(chuàng)建SQLServer數(shù)據庫
實驗3創(chuàng)建數(shù)據庫
第3章數(shù)據庫設計與創(chuàng)建
1.傳統(tǒng)數(shù)據庫設計方法
1)需求分析階段
數(shù)據庫設計的首要任務是準確地了解和分析用戶需求(包括數(shù)據與處理)和現(xiàn)有條件,確定創(chuàng)建數(shù)據庫的目的和要求以及數(shù)據庫的使用方法。為了完成這個任務,數(shù)據庫設計者應該同應用領域的專家和用戶進行充分的溝通和交流,系統(tǒng)調查和分析用戶的真實需求以及現(xiàn)有的應用環(huán)境和技術條件,盡可能搜集足夠的數(shù)據庫設計的依據。3.1數(shù)據庫設計方法
2)概念結構設計階段
概念結構設計是整個數(shù)據庫設計的關鍵,它通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的數(shù)據庫系統(tǒng)的概念模型:E-R模型或面向對象模型。其目的是生成一種簡單的數(shù)據描述方法,使得所描述的數(shù)據的組織和處理符合用戶和開發(fā)者的意圖。概念結構設計一般分為如下三步(以E-R模型為例)。
(1)設計局部E-R圖:用E-R圖描述單個實體或部分實體之間的聯(lián)系。
(2)設計全局E-R圖:將局部E-R圖合并在一起,得到初步的全局E-R圖。合并過程中,可能會出現(xiàn)屬性命名不一致或冗余的聯(lián)系等,都需要解決。
(3)評審:即由數(shù)據庫管理員和用戶對數(shù)據庫全局概念結構進行評審,使得描述準確、結構完整和文檔齊備。
3)邏輯結構設計階段
邏輯結構設計是將概念數(shù)據模型轉換為具體DBMS所支持的數(shù)據模型,對其進行優(yōu)化。例如,將用E-R圖表示的概念模型轉換為SQLServer支持的關系數(shù)據模型,然后根據用戶的處理需求以及安全性的考慮等,在基本表的基礎上建立必要的視圖,形成適用于不同用戶的外模式。一般來說,要經歷初始模式設計、子模式設計、模式評價和修正等階段,最后才能導出數(shù)據庫的邏輯結構。
4)物理結構設計階段
數(shù)據庫物理設計是根據DBMS的特點和處理的需要,為邏輯數(shù)據模型選取一個適合于應用環(huán)境的物理結構(內模式),包括數(shù)據庫文件的組織格式、內部存儲結構、建立索引和表的聚集等。
5)數(shù)據庫實施階段
在數(shù)據庫實施階段,設計人員運用DBMS提供的數(shù)據庫語言以及軟件開發(fā)工具,根據邏輯設計和物理設計的結果建立數(shù)據庫,編制與調試應用程序,組織數(shù)據入庫,并進行數(shù)據庫系統(tǒng)的功能測試。
6)數(shù)據庫運行和維護階段
數(shù)據庫應用系統(tǒng)經過試運行后即可投入正式運行。在數(shù)據庫系統(tǒng)運行過程中必須不斷地對其進行評價、調整與修改。
需要指出的是,上述設計步驟既是數(shù)據庫設計的過程,也包括了數(shù)據庫應用系統(tǒng)的設計過程。在數(shù)據庫設計過程中,應將數(shù)據庫本身的設計與數(shù)據庫中數(shù)據處理的設計結合起來,使得兩個方面的需求分析、抽象、設計和實現(xiàn)同時進行,相互參照,相互補充,從而提高設計質量。如果所設計的系統(tǒng)比較復雜,還應該考慮使用專門的數(shù)據庫設計工具和軟件開發(fā)工具,進行規(guī)范設計并減少設計工作量。
2.數(shù)據庫設計的特征
1)反復性
一般來說,數(shù)據庫設計是需要經過反復推敲和修改才能完成而不大可能是一氣呵成的。一個設計階段總是在前一階段的基礎上開展工作的,但也可以向前一階段反饋要求改進的信息并在改進之后重新設計。有時候可能還要多次地互為參照并反復調整,以求保證設計效果。
2)試探性
數(shù)據庫設計過程中,往往既要構思對于種類繁多且規(guī)模宏大的數(shù)據本身的存儲和處理,又要考慮眾多用戶對數(shù)據操縱的多種需求,還必須綜合平衡影響系統(tǒng)性能的各種工程因素,因而,不同的設計者甚至同一設計者在不同的時間段所給出的設計結果都可能有很大差別。為了達到較好的設計效果,實際的設計過程往往是逐步試探的過程,可能會先給出初步方案、權衡各種因素并調整后定案,發(fā)現(xiàn)問題再進行調整定案……
3)逐步進行
實際的數(shù)據庫設計工作往往是由各類人員分階段進行的。這樣做既有技術分工上的必要性,又可以分階段把關、逐級審查、保證設計的質量和進度。這種工作方式不利于對后一階段反饋到前一階段的需求的處理,這就要求每一階段都考慮周全,盡可能地減少這種反饋。
3.面向對象數(shù)據庫設計
傳統(tǒng)的數(shù)據庫設計過程中,往往用數(shù)據流圖來進行需求分析,用E-R圖來構建數(shù)據庫的概念模型,這兩種方法本身沒有必然的聯(lián)系,不能在需求分析階段和數(shù)據庫設計階段形成自然的溝通。如果采用面向對象分析方法進行需求分析,采用面向對象設計方法進行數(shù)據庫設計,則在進行需求分析時構建的對象模型可以自然地轉換為適用的數(shù)據庫模式。
面向對象的觀點認為,任何一個系統(tǒng)都是由若干個對象和這些對象之間的相互作用構成的。其中對象由數(shù)據和相應的操作兩部分構成的。對象具有自主性、封裝性和動態(tài)性。將面向對象作為方法學應用到軟件工程的各個階段,其實質就是尋找對象以及對象之間的相互關系。面向對象分析是對真實世界的對象進行建模,其根本出發(fā)點是站在應用的角度對問題域進行刻畫和描述,這樣有利于對問題的理解。需求分析階段的結果是“問題陳述?+?對象模型?+?動態(tài)模型?+?功能模型”。設計階段是對原對象模型的進一步描述,此階段可用面向對象方法實現(xiàn)數(shù)據庫的設計。
【例3-1】“教學”數(shù)據庫的規(guī)劃。
本例將構建一個用于教學管理的簡易數(shù)據庫,初步規(guī)劃的功能如下:
(1)存儲以下原始數(shù)據。
●與教學相關的實體描述,如“學生”基本情況、“教師”基本情況和“課程”基本情況。
●與學生相關的“班級”和“專業(yè)”情況;與教師和專業(yè)相關的“學院”情況。3.2數(shù)據庫設計過程
(2)教務員可以“排課”或查看開課計劃。
●教務員可以排課,即為各專業(yè)安排開課計劃。排一次課之后,就會生成一個包括專業(yè)標識、課程標識、教師標識和開課學期的“開課”表中的一條記錄。
●教務員可以輸出課表,即按專業(yè)輸出開課計劃,一次輸出排課表中的一條記錄。
(3)學生可以“選課”或查看考試成績。
●學生可以查看自己專業(yè)的開課計劃,一次輸出排課表中的一條記錄。
●學生可以選課,選一門課之后,生成一個包括學號、課程標識和分數(shù)(此時為空值)的“成績”表中的一條記錄。
●學生在考試過后,還可以查看并輸出自己的考試成績,即“選課”表中的自己的標識(學號)所對應的一條或多條記錄。
(4)教務員可以“登錄成績”或查看學生考試成績。
●教務員可以登錄學生的考試成績,登錄一次將會充實“成績”表中的一條記錄中的“分數(shù)”字段。
●教務員可以查看并輸出學生的考試成績,即“成績”表中的一條或多條記錄。
(5)日常的查詢、更新和數(shù)據統(tǒng)計操作。例如,教務員或者其他教師可以查看或輸出學生的姓名、班級和電話;查詢某個專業(yè)的開課計劃,輸出學生成績清單等。3.2.1數(shù)據庫設計的需求分析
1.需求分析階段的任務
需求分析階段的任務是,通過詳細調查現(xiàn)實世界中要處理的對象(組織、部門、企業(yè)等),充分了解原系統(tǒng)的工作情況,明確用戶的各種需求,然后在這個基礎上確定新系統(tǒng)的功能。新系統(tǒng)必須充分考慮今后可能的擴充和改變,不能僅按照當前的應用需求來設計數(shù)據庫。調查的重點是“數(shù)據”和“處理”,通過調查,要從中獲得每個用戶對數(shù)據庫的要求,包括以下幾個方面:
(1)信息要求。這一要求是指用戶需要從數(shù)據庫中獲得的信息的內容和性質。由信息要求可以導出數(shù)據要求,也就是說,搞清楚數(shù)據庫中需要存放哪些數(shù)據。
(2)處理要求。這一要求是指用戶要完成什么處理功能,對處理的響應時間有什么要求,處理的方法是批處理還是聯(lián)機處理。
(3)安全性和完整性要求。
2.數(shù)據流圖
數(shù)據流圖是結構化分析方法中用于表示系統(tǒng)邏輯模型的一種工具。它以圖形的方式描繪數(shù)據在系統(tǒng)中流動和處理的過程,是需求理解的邏輯模型的圖形表示。由于它只反映系統(tǒng)必須完成的邏輯功能,所以是一種功能模型,直接支持系統(tǒng)的功能建模。
數(shù)據流圖從數(shù)據傳遞和加工的角度來刻畫數(shù)據流從輸入到輸出的移動變換過程。數(shù)據流圖中的主要圖形元素如圖3-1所示。圖3-1數(shù)據流圖中的主要圖形元素
3.數(shù)據字典
需求分析之后,得到一個數(shù)據字典。數(shù)據字典是系統(tǒng)中各類數(shù)據描述的集合,是進行詳細的數(shù)據收集和數(shù)據分析所獲得的主要成果。數(shù)據字典通常包括5個部分。
(1)數(shù)據項:數(shù)據的最小單位。描述的內容為
數(shù)據項描述?=?{數(shù)據項名,數(shù)據項含義說明,別名,數(shù)據類型,長度,取值范圍,取值含義,與其他數(shù)據項的邏輯關系,數(shù)據項之間的聯(lián)系}
其中,“取值范圍”、“與其他數(shù)據項的邏輯關系”定義了數(shù)據的完整性約束條件,是設計數(shù)據檢驗功能的依據。
(2)數(shù)據結構:若干個數(shù)據項的有意義的集合。描述的內容為
數(shù)據結構描述?=?{數(shù)據結構名,含義說明,組成,{數(shù)據項或數(shù)據結構}}
可以看出,數(shù)據結構既可以由若干個數(shù)據項組成,也可以由若干個數(shù)據結構組成。
(3)數(shù)據流:可以是數(shù)據項,也可以是數(shù)據結構,表示某個數(shù)據處理的輸入或輸出,即數(shù)據結構在系統(tǒng)內的傳輸路徑。描述的內容為
數(shù)據流描述?=?{數(shù)據流名,說明,數(shù)據流來源,數(shù)據流去向,組成;{數(shù)據結構},平均流量,高峰期流量}
其中,“平均流量”指的是每天、每周或每月等的傳輸次數(shù)。
(4)數(shù)據存儲:處理過程中存取的數(shù)據,可作為數(shù)據流的來源或去向。常常是手工憑證、手工文檔或計算機文件。描述的內容為
數(shù)據存儲描述?=?{數(shù)據存儲名,說明,編號,流入的數(shù)據流,流出的數(shù)據流,組成;{數(shù)據結構},數(shù)據量,存取方式}
其中,“存取方式”有批處理/聯(lián)機處理、檢索更新、順序檢索/隨機檢索。
(5)處理過程:具體處理邏輯一般用判定表或判定樹來描述,數(shù)據字典中只需要描述處理過程的說明性信息。描述的內容為
處理過程描述?=?{處理過程名,說明,輸入;{數(shù)據流},輸出;{數(shù)據流},處理;{簡要說明}}
其中,“簡要說明”主要說明該處理過程的功能及處理要求。
數(shù)據字典是在需求分析階段建立,在數(shù)據庫設計過程中不斷修改、充實和完善的。
【例3-2】“教學”數(shù)據庫的需求分析。
不妨將例3-1中“教學”數(shù)據庫的初步規(guī)劃看做用戶的實際需求,據此進行“教學”數(shù)據庫的需求分析。
(1)確定實體。
●該數(shù)據庫需要存儲和處理有關學生、課程和教師基本情況的數(shù)據,因而,學生、課程和教師都是系統(tǒng)中的實體,定義它們的屬性如下:
教師:工號、姓名、職稱、性別、出生年月、住址、電話
學生:學號、姓名、性別,出生年月、籍貫、宿舍、電話
課程:課程號、課程名、學分、學時●教務員雖為系統(tǒng)用戶,但其信息與系統(tǒng)處理無關,故不作為實體。
●為了準確地描述學生的情況,需要添加對于學生所屬的班級、班級所屬的專業(yè)以及專業(yè)所屬的學院(也與教師的描述相關)的描述,因而,班級、專業(yè)和學院也成為系統(tǒng)中的實體,定義它們的屬性如下:
班級:班號、班名、人數(shù)
專業(yè):專業(yè)號、專業(yè)名
學院:學院號、學院名、地址、電話
(2)作數(shù)據流圖。
通常,數(shù)據流圖是分層作出的,作數(shù)據流圖的過程反映了自頂向下進行功能分解和細化的分析過程。頂層(第0層)表示系統(tǒng)的開發(fā)范圍以及系統(tǒng)與周圍環(huán)境的數(shù)據交換關系;底層代表了那些不可進一步細分的“原子加工”;中間各層分別是對其上一層父圖的細化,其中的每個加工可以繼續(xù)細化,中間層次的多少由系統(tǒng)的復雜程度來決定。
本例中,描述教務員排課(包括查看成績)以及教務員和學生查看并輸出開課計劃的數(shù)據流圖如圖3-2(a)所示。幾個存儲文件中,“開課”是“排課”活動所產生的數(shù)據存儲,其余幾個都是系統(tǒng)中已經確定的實體。
描述學生選課、教師登錄考試成績以及學生和教師查看并輸出考試成績的數(shù)據流圖如圖3-2(b)所示。幾個存儲文件中,“成績”是“選課”活動所產生的數(shù)據存儲,其余幾個都是系統(tǒng)中已經確定的實體。圖3-2“選課”及“排課”的數(shù)據流圖
(3)數(shù)據字典。
概括地說,數(shù)據字典就是用來定義數(shù)據流圖中各個成分的具體含義的,它以一種準確的、無二義性的說明方式為系統(tǒng)的分析、設計及維護提供了有關元素的一致的定義和詳細的描述。它和數(shù)據流圖共同構成了系統(tǒng)的邏輯模型,是需求規(guī)格說明書的主要組成部分。例如,對于數(shù)據項“學號”可以定義為對于數(shù)據結構“學生”可以定義為對于數(shù)據流“選課信息”可以定義為對于因登錄成績而產生的數(shù)據存儲“成績”可以定義為對于處理過程“成績查詢”可定義為3.2.2數(shù)據庫概念設計
數(shù)據庫概念設計的方法有如下兩種。
(1)集中式模式設計法。這是一種統(tǒng)一的模式設計方法,它按照需求,由統(tǒng)一的機構或人員設計一個綜合的全局模式。這種設計方法簡單方便,強調統(tǒng)一與一致,適用于小型或不算復雜的單位或部門,而對大型的或語義關聯(lián)較為復雜的單位則不適合。
(2)視圖集成設計法。這種方法將一個單位分解為若干個部分,先分別對每部分進行局部模式設計,建立它們的視圖,然后以各視圖為基礎進行集成。在集成過程中,由于視圖設計的分散性,可能會導致不一致,從而出現(xiàn)某些沖突,因而需要對視圖進行修正,最終形成全局模式。
1.選擇局部應用
按系統(tǒng)具體情況,在多層數(shù)據流圖中選擇一個適當層次的數(shù)據流圖,使這組圖中每部分對應一個局部應用,從這一層次的數(shù)據流圖出發(fā),設計出分E-R圖。
2.視圖設計
視圖設計一般有三種設計次序:自頂向下、由底向上、由內向外。
(1)自頂向下:先從抽象級別高且普遍性強的對象開始逐步細化、具體化與特殊化。例如,在進行“職工”視圖設計時,可先將職工分為“干部”與“一般職工”,進一步地,還可再將一般職工細分為“辦公室人員”、“銷售部人員”、“研發(fā)部人員”、“一廠人員”、“二廠人員”等。
(2)由底向上:先從具體的對象著手,逐步抽象、普遍化和一般化,最終形成一個完整的視圖設計。
(3)由內向外:先從最基本與最明顯的對象著手,逐步擴充至非基本、不明顯的其他對象。例如,在進行“職工”視圖設計時,從最基本的職工開始,逐步擴展至職工所在的部門,是“一般職工”還是“干部”等。
3.視圖集成
(1)命名沖突:有同名異義和同義異名兩種情況。例如,假定“圖書館”數(shù)據庫中有一個讀者關系,則“借書證號”與可能命名的“讀者編號”,屬于同義異名。
(2)概念沖突:同一事物在一處為實體而在另一處為屬性或聯(lián)系。例如,學校中的“學院”可以作為一個具有“名稱”、“教工數(shù)”、“學生數(shù)”、“電話”等各種屬性的實體,也可以作為學生實體的一個屬性,表明學生所在的學院。
(3)域沖突:相同屬性在不同視圖中有不同的域,例如,“借書證號”在某個視圖中為字符串,而在另一個視圖中可能為整數(shù)。如果一個屬性在不同的視圖中采用了不同的度量單位,也屬于域沖突。
(4)約束沖突:不同的視圖可能有不同的約束。視圖經過合并,生成的是初步的E-R圖,其中可能存在冗余的實體間聯(lián)系。冗余數(shù)據和冗余聯(lián)系容易破壞數(shù)據庫的完整性,給數(shù)據庫的維護增加困難。因此,對于視圖集成后所形成的整體的數(shù)據庫概念結構還必須進一步驗證,以確保它滿足以下條件:
●整體概念結構內部必須具有一致性,即不能存在互相矛盾的表達;
●整體概念結構能準確地反映每個原有的視圖結構,包括屬性、實體及實體間的聯(lián)系;
●整體概念結構能滿足需求分析階段所確定的所有要求;
●整體概念結構最終還應該提交給用戶,征求用戶與有關人員的意見,進行評審、修改和優(yōu)化,然后確定下來,作為數(shù)據庫的概念結構和進一步設計數(shù)據庫的依據。
【例3-3】“教學”數(shù)據庫的概念設計。
(1)分E-R圖設計。根據例3-2中對于“教學”數(shù)據庫進行需求分析的結果,可以設計出如圖3-3所示的幾個實體的E-R圖。圖3-3“教學”數(shù)據庫的分E-R圖(2)“教學”數(shù)據庫中實體之間的聯(lián)系如圖3-4所示。圖3-4“教學”數(shù)據庫中實體之間的聯(lián)系
(3)將分E-R圖設計得到的結果合并,得到如圖3-5所示的“教學”數(shù)據庫的總E-R圖。圖3-5“教學”數(shù)據庫的總E-R圖3.2.3數(shù)據庫的邏輯設計
1.轉換時會遇到的一些問題
(1)命名及屬性域的處理。關系模式中可沿用E-R圖中的原有命名,也可另行命名。當然,應該避免重名。由于關系數(shù)據庫管理系統(tǒng)一般只支持幾種數(shù)據類型,而E-R圖中的屬性域則不受限制,故遇到不支持的數(shù)據類型時要進行類型轉換。
(2)可再分的非原子屬性的處理。E-R圖中允許有非原子屬性而關系模式中不允許出現(xiàn),故要進行轉換。非原子屬性主要有元組型和集合型。例如,如圖3-6所示的兩個關系中,分別包含元組型的非原子屬性和集合型的非原子屬性。其主要轉換方法是將元組屬性橫向展開而集合屬性縱向展開。
(3)聯(lián)系的轉換。聯(lián)系可以用關系來表示,也可以歸并到相關聯(lián)的實體中。圖3-6包含非原子屬性的表
2.邏輯模式規(guī)范化及其調整和實現(xiàn)
(1)關系規(guī)范化。關系規(guī)范化理論研究的是關系模式中各屬性之間的依賴關系及其對關系模式的影響,探討“好”的關系模式應該具備的性質,以及達到“好”的關系模式的設計算法。規(guī)范化理論給出了判斷關系模式優(yōu)劣的理論標準,幫助設計者預測可能出現(xiàn)的問題,提供自動產生各種模式的算法工具,因此,是設計人員應該掌握的有力工具。
(2)關系數(shù)據庫管理系統(tǒng)。有時,需要對邏輯模式進行調整,以滿足關系數(shù)據庫管理系統(tǒng)的性能、存儲空間等要求,同時對模式進行適應關系DBMS限制條件的修改,其目
的是:
①調整性能,以減少連接運算。
②調整關系大小,使每個關系數(shù)量保持在合理水平,從而提高存取效率。
③盡量采用快照(snapshot),因為應用中需要的往往只是某個固定時刻的值,這時可使用快照固定這個時刻的值,并定期更換。這種方式可以顯著提高查詢速度。
3.關系視圖設計
關系視圖主要有以下作用:
(1)提供數(shù)據的邏輯獨立性。其目的是保證應用程序不受邏輯模式變化的影響。數(shù)據的邏輯模式會隨著應用的發(fā)展而不斷變化,邏輯模式的變化必然會影響到應用程序,這會給維護工作帶來困難。有了關系視圖之后,建立在其上的應用程序就不會隨邏輯模式的修改而變化,這時變動的只是關系視圖的定義。
(2)適應用戶對數(shù)據的不同需求。數(shù)據庫一般都有較大的結構,而數(shù)據庫用戶一般只希望了解其中與自己相關的一部分。這時,可以使用關系視圖屏蔽用戶不需要的模式,而只將用戶需要了解的部分呈現(xiàn)出來。
(3)有一定的數(shù)據保密功能。關系視圖為每個用戶劃定了訪問數(shù)據的范圍,從而在使用數(shù)據庫系統(tǒng)的各個用戶之間起到一定的隔離作用。
【例3-4】將例3-3中設計的“教學”數(shù)據庫的概念模型轉換為關系模型。
(1)一個實體型轉換為一個關系模式。實體的屬性就是關系的屬性,實體的關鍵字就是關系的關鍵字?!敖虒W”數(shù)據庫中的幾個實體可以轉換為以下關系模式,每個關系模式中帶下劃線的字段都可以作為相應關系中的主鍵:
學生(學號,姓名,性別,出生年月,籍貫,宿舍,電話)
班級(班號,班名,人數(shù))
專業(yè)(專業(yè)號,專業(yè)名)
教師(工號,姓名,職稱,性別,出生年月,住址,電話)
學院(學院號,學院名,地址,電話)
課程(課程號,課程名,學分,學時)
(2)一個m?:?n聯(lián)系轉換為一個關系模式。該聯(lián)系兩端兩個實體的鍵以及聯(lián)系本身的屬性均轉換為關系的屬性,而該關系的鍵為各實體的鍵的組合。“教學”數(shù)據庫中的m?:?n聯(lián)系“開課”可以轉換為以下關系模式:
開課(工號,課程號,學期)
(3)一個1?:?n聯(lián)系可以轉換為一個獨立的關系模式,也可以與n端對應的關系模式合并。如果轉換為一個獨立的關系模式,則與該聯(lián)系相連的各實體的關鍵字以及聯(lián)系本身的屬性均轉換為關系的屬性,而關系的關鍵字為n端實體的關鍵字。例如,“教學”數(shù)據庫中的“歸屬”是一個1?:?n聯(lián)系,可以轉換為獨立的關系模式:
歸屬(學院號,專業(yè)號)
也可以與“專業(yè)”關系模式合并,這時“專業(yè)”關系模式為
專業(yè)(專業(yè)號,專業(yè)名,學院號)
本例中所有1?:?n聯(lián)系均按后一種方式處理。
(4)一個1?:?1聯(lián)系可以轉換為一個獨立的關系模式,也可以與任意一端對應的關系模式合并。如果轉換為獨立的關系模式,則相關聯(lián)的各實體的關鍵字以及聯(lián)系本身的屬性均轉換為關系的屬性,每個實體的關鍵字均為該關系的候選關鍵字。如果與某一端對應的關系模式合并,則需要在該關系模式的屬性中加入另一個關系模式的關鍵字和聯(lián)系本身的屬性。例如,假定“教學”數(shù)據庫中要添加一個“家長”實體,相應的關系模式為
家長(家長名,地址,電話)
“家長”與“學生”兩個實體之間是一個1?:?1聯(lián)系,則可將其這個聯(lián)系合并到“家長”關系模式中,使其變?yōu)?/p>
家長(家長名,學號,地址,電話)
(5)三個或三個以上實體間的一個多元聯(lián)系轉換為一個關系模式,與該多元聯(lián)系相連的各實體的鍵以及聯(lián)系本身的屬性轉換為關系的屬性,而關系的鍵為各實體的組合。例如,“上課”聯(lián)系是一個三元聯(lián)系,可以轉換為如下關系模式:
上課(學號,課程號,專業(yè)號,分數(shù))
(6)對于自聯(lián)系,即同一實體集的實體之間的聯(lián)系,也可按上述1?:?1、1?:?n和m?:?n分別處理。例如,如果教師實體集內部存在課程組長與其他雇員之間的領導與被領導的1?:?n自聯(lián)系,可以將該聯(lián)系與教師實體合并,形成關系模式:
教師(工號,姓名,組長,…)
其中增加了一個“組長”屬性,存放相應組長的工號。
(7)具有相同鍵的關系模式可以合并。合并可以減少數(shù)據庫中的關系個數(shù),如果兩個關系模式具有相同的主鍵,可將其中一個關系模式的全部屬性加入到另一個關系模式中,然后去掉其中的同義屬性,并適當調整屬性的次序。
按照上述原則,如圖3-5所示E-R圖可以轉換為下列關系模型:
學生(學號,姓名,班號,性別,出生年月,籍貫,宿舍,電話)
班級(班號,班名,專業(yè)號,人數(shù))
專業(yè)(專業(yè)號,專業(yè)名,學院號)
教師(工號,姓名,學院號,職稱,性別,出生年月,住址,電話)
學院(學院號,學院名,地址,電話)
課程(課程號,課程名,學分,學時)
上課(學號,課程號,專業(yè)號,分數(shù))
開課(工號,課程號,學期)
(1)通過SQLServer的可視化用戶界面,使用各種菜單、工具欄以及向導、模板等,創(chuàng)建數(shù)據庫和數(shù)據庫中的表并實現(xiàn)數(shù)據的輸入、查詢、更新和報表輸出等各種功能。
(2)在已有數(shù)據庫中創(chuàng)建視圖、索引、存儲過程和觸發(fā)器等各種對象,進一步豐富數(shù)據庫的內涵,以便實現(xiàn)更為深入、更加復雜或者規(guī)模更大的操作。
(3)編寫數(shù)據庫應用程序(往往要與其他軟件結合才能完成),進一步提高操作的等級、規(guī)模和適用范圍。3.3
SQLServer數(shù)據庫系統(tǒng)3.3.1SQLServer中的數(shù)據庫管理
1.系統(tǒng)數(shù)據庫與用戶數(shù)據庫
打開SQLServerManagementStudio,并在左側“對象資源管理器”窗格中展開數(shù)據庫實例下的“數(shù)據庫”結點,可以看到當前數(shù)據庫實例下管理的所有數(shù)據庫,如圖3-7所示。圖3-7“對象資源管理器”中的系統(tǒng)數(shù)據庫與用戶數(shù)據庫列表從中可以看到,SQLServer中的數(shù)據庫主要分為兩類:系統(tǒng)數(shù)據庫和用戶數(shù)據庫。系統(tǒng)數(shù)據庫主要用于記錄系統(tǒng)級的數(shù)據和對象,各數(shù)據庫的主要功能如下。
(1)?master數(shù)據庫:記錄SQLServer的系統(tǒng)級信息,包括實例管理下的所有元數(shù)據(如登錄賬戶)、端點、鏈接服務器和系統(tǒng)配置設置。同時,master數(shù)據庫還記錄了所有其他數(shù)據庫的存在、數(shù)據庫文件的位置以及SQLServer的初始化信息。因此,在master數(shù)據庫中不能創(chuàng)建任何用戶對象,如果它不可用,也就無法啟動SQLServer了。
(2)?model數(shù)據庫:用作為SQLServer實例上創(chuàng)建的所有數(shù)據庫的模板。由于每次啟動SQLServer時都會重新創(chuàng)建tempdb數(shù)據庫,故model數(shù)據庫始終都在SQLServer系統(tǒng)中。
(3)?msdb數(shù)據庫:SQLServer代理用于進行復制、作業(yè)調度以及管理警報等活動。msdb數(shù)據庫通常在調度任務或排除故障時使用。
(4)?tempdb數(shù)據庫:一個工作空間,用于保存臨時對象或中間結果集,是所有用戶都可用的全局資源。
2.數(shù)據文件和日志文件
SQLServer將數(shù)據庫映射為一組操作系統(tǒng)文件。數(shù)據和日志信息分別存儲在不同的文件中。因此,SQLServer數(shù)據庫的文件有兩種類型:數(shù)據文件和日志文件。這兩種文件的結構不同。數(shù)據文件還可以再分為主要文件和次要文件兩類。為了便于分配和管理,可以將數(shù)據文件集合起來,放到文件組中。
(1)主要文件:主要數(shù)據文件包含數(shù)據庫的啟動信息,并指向數(shù)據庫中的其他文件。用戶數(shù)據和對象可存儲在該文件中,也可以存儲在次要數(shù)據文件中。每個數(shù)據庫有一個主要數(shù)據文件。主要數(shù)據文件的建議文件擴展名為“.mdf”。
(2)次要文件:次要數(shù)據文件是可選的,由用戶定義并存儲用戶數(shù)據。通過將每個文件放在不同的磁盤驅動器上,次要文件可用于將數(shù)據分散到多個磁盤上。另外,如果數(shù)據庫超過了單個Windows文件的最大容量,可以使用次要數(shù)據文件,這樣數(shù)據庫就能繼續(xù)增長。次要數(shù)據文件的建議文件擴展名為“.ndf”。
(3)事務日志文件:事務日志文件保存用于恢復數(shù)據庫的日志信息。每個數(shù)據庫必須至少有一個日志文件。事務日志文件的建議文件擴展名為“.ldf”。
注:并不強制使用文件擴展名“.mdf”和“.ndf”,用之則有助于標識文件的類型和用途。例如,可以創(chuàng)建一個簡單的數(shù)據庫Sales,其中一個是包含所有數(shù)據和對象的主要文件,另一個是包含事務日志信息的日志文件,也可以創(chuàng)建一個更復雜的數(shù)據庫Orders,其中有一個主要文件和五個次要文件,數(shù)據庫中的數(shù)據和對象分散在所有六個文件中,另有四個日志文件存放事務日志信息。
默認情況下,數(shù)據和事務日志存放于同一個驅動器上的同一個路徑下。這是處理單磁盤系統(tǒng)時采用的方法。實際生產環(huán)境中,最好將數(shù)據和日志文件放在不同的磁盤上。
3.文件組
為了便于數(shù)據布局和管理任務(如備份和還原操作),用戶可以在SQLServer中將多個文件劃分為一個文件集合,這個文件集合就是一個文件組。例如,可以分別在三個磁盤驅動器上創(chuàng)建三個文件Data1.ndf、Data2.ndf和Data3.ndf,將它們分給文件組fgroup1,然后在文件組fgroup1上創(chuàng)建一個表,則對表中數(shù)據的查詢將分散到三個磁盤上,從而提高了性能。文件組分為三種類型。
(1)主要文件組:包含主要文件的文件組。所有系統(tǒng)表都分配到這個文件組中。一個數(shù)據庫有一個主要文件組。其中包含主要數(shù)據文件和未放入其他文件組的次要數(shù)據文件。
(2)用戶定義文件組:用戶首次創(chuàng)建數(shù)據庫或修改數(shù)據庫時自定義的文件組。創(chuàng)建這種文件組的主要目的是進行數(shù)據分配。例如,可將位于不同磁盤的文件劃分為一個組,并在這個文件組上創(chuàng)建一個表,就可以提高表的讀寫效率。
(3)默認文件組:如果在數(shù)據庫中創(chuàng)建某個對象時沒有指定所屬的文件組,就會被分到默認文件組。不管何時,只能將一個文件組指定為默認文件組。默認文件組中的文件必須足夠大,能夠容納未分配給其他文件組的所有新對象。如果未使用ALTERDATABASE語句進行更改,則PRIMARY文件組是默認文件組,不過,即使改變了默認文件組,系統(tǒng)對象和表仍然分配給PRIMARY文件組而不是新的默認文件組。
注:一般情況下,文件組中的文件尺寸不會自動增長,除非文件組中的所有文件都分配不到可用空間。3.3.2SQLServer數(shù)據庫中的表
SQLServer數(shù)據庫是關系型數(shù)據庫,一個數(shù)據庫由多個表組成,一個表對應關系理論中所說的一個關系,用于存儲一批數(shù)據。表中的數(shù)據組織成一條一條記錄,每條記錄又由分屬于不同數(shù)據類型和其他特征的多個字段構成,如圖3-8所示。圖3-8數(shù)據庫中的表
1.字段的屬性
表的定義(表的結構)包含了表頭的內容和格式,也包含了描述表中包含的數(shù)據類型的元數(shù)據(metadata,數(shù)據描述信息)。每個字段都具有該字段可存儲數(shù)據類型的一組規(guī)則。在輸入表中的數(shù)據時,如果正在輸入的某個字段的值違反了表的定義中預先指定的規(guī)則,則系統(tǒng)會拒絕插入或修改這一行。例如,如果預先為“學生”表中的“年齡”字段定義了一個約束:“年齡<30”,則當所輸入的學生的年齡為35時,系統(tǒng)會拒絕插入這個學生的記錄。表中所有的字段名在同一個表中具有唯一性,同一字段的數(shù)據屬于同一種數(shù)據類型。除了用字段名和數(shù)據類型來指定字段的屬性外,還可以定義其他屬性,例如:
(1)?NULL或NOTNULL屬性。NULL即空值,通常表示未知、不可用或將在以后添加的數(shù)據。如果指定了表中某個字段具有NULL屬性,則在輸入數(shù)據時可以省略該字段的值。反之,那些指定為具有NOTNULL屬性的字段都必須在輸入時給出具體的值。
(2)?IDENTITY屬性。IDTENTITY屬性就是字段的標識屬性,指定了IDENTITY屬性的字段稱為“標識”字段。任何表中都可以創(chuàng)建一個而且只能創(chuàng)建一個標識字段,該字段只能定義為decimal、int、numeric、bigint或tinyint等數(shù)值型字段,而且所有的值都是系統(tǒng)自動生成的序號值,每個序號值唯一標識表中的一行。
2.主鍵
主鍵可以是一個字段,也可以是多個字段。例如,在“學生”表中,“學號”可以作為主鍵;在“成績”表中,“學號”和“課程號”一起作為主鍵。在SQLServer中,設置為主鍵的字段在顯示表的結構時用鑰匙狀的圖標標識。
主鍵字段(或字段組)的每個值(或每組值)都代表一條且只代表一條記錄。因而,每條記錄中主鍵的值都不能為空,一條記錄中的主鍵的值也不能與其他任何記錄中的主鍵的值
相同。實際創(chuàng)建數(shù)據庫時,為了操作方便起見,可能會采用一些特殊的處理方法。例如,以下兩種方法常會出現(xiàn)在一些使用頻率比較高的數(shù)據庫中:
(1)為一個數(shù)據庫中的一個表或者多個表添加一個專門的字段作為主鍵,其值為每個記錄的編號或類似的內容,以后修改數(shù)據庫中這些表的結構時可以改動得少一些。
(2)將一個經常使用的字段放到多個表甚至所有表中,方便數(shù)據查詢。例如,假定“工資管理數(shù)據庫”中有三個表“職工”、“工資”和“扣除”,其中都將“職工號”作為主鍵,則在每月計算每個職工的工資時,按照“職工號”分別從“職工”表中查出每個人的姓名、從“工資”表中查出他的工資數(shù)(基本工資、工齡工資、業(yè)績津貼、補貼、加班費等)、從“浮動工資”表中查出他的扣除數(shù)(房管、水電、借款等),即可算出應發(fā)給他的工資數(shù)目。
3.表與表之間的聯(lián)系
表與表之間可以建立關聯(lián),以便體現(xiàn)事物與事物之間的聯(lián)系,如圖3-9所示。圖3-9表與表之間的聯(lián)系
(1)“產品”表與“供應商”表之間通過共有的“供應商ID”字段建立了關聯(lián)。“供應商ID”字段是“供應商”表的主鍵,而在“產品”表中叫做外鍵。這個外鍵表達了“產品”表與“供應商”表之間的一對多聯(lián)系:“供應商”表中一個“供應商ID”的值可以在“產品”表的多條記錄中出現(xiàn),也就是說,一個供應商(“供應商”表中的一條記錄)可以提供多種產品(“產品”表中的多條記錄)。
(2)“產品”表與“訂單明細”表之間通過“產品ID”建立了一對多聯(lián)系,“訂單明細”表和“訂單”表之間又通過“訂單ID”建立了一對多聯(lián)系。實際上,這兩個聯(lián)系相當于“產品”表和“訂單”表之間的多對多聯(lián)系,因為關系數(shù)據模型不能表達多對多聯(lián)系,才不得不拆成了兩個一對多聯(lián)系。
4.約束
約束是SQLServer提供的自動保持數(shù)據庫完整性的一種方法,它通過限制字段中的數(shù)據、記錄中的數(shù)據以及表與表之間的數(shù)據來保證數(shù)據的完整性。主鍵就是約束的一種形式。
在SQLServer中,對于基本表的約束分為列約束和表約束。列約束是對某個特定列的約束,包含在列的定義中,直接跟在該列的其他定義之后;表約束與列定義相互獨立,不包括在列定義中,通常用于對多個列一起進行約束。創(chuàng)建表時,可以創(chuàng)建CHECK約束作為表定義的一部分。例如,如果創(chuàng)建“學生”表時為“年齡”字段添加了CHECK約束“年齡<30”,則當輸入該字段的值時,不能輸入大于30的數(shù)字。如果表已經存在,則可以添加CHECK約束。表和列可以包含多個CHECK約束。CHECK約束條件的示例如表3-1所示。表3-1CHECK約束條件示例
5.索引
索引是一種幫助用戶按照索引字段(一個或幾個字段的集合)的值快速找到指定內容的機制。索引提供指向存儲在表中特定字段的值的指針,然后根據指定的排列次序對這些指針進行排序。數(shù)據庫中索引的作用與書中的索引相同:在查找特定值時,先在索引中搜索該值,然后按照指向包含該值的行的指針跳轉到所需的內容。因為通過索引查找比直接在原表中查找快捷得多,因而,使用索引可以加快對表中特定數(shù)據的訪問速度。索引雖然起到了為記錄排序的作用,但不改變表中記錄的物理順序,而是另外建立一個記錄的順序表,操作時引用它就可以了。
一般來說,當某個或某些字段被當作查找記錄或排序的依據時,可以將其設定為索引。一個表可以建立多個索引,每個索引確定表中記錄的一種邏輯順序。同指定主鍵類似,可以在單個字段上創(chuàng)建索引,也可以在多個字段上創(chuàng)建索引。
在SQLServer系統(tǒng)中,根據索引的順序與數(shù)據表的物理順序是否相同,可將索引分為兩種類型:一種是表中記錄的物理順序與索引順序相同的聚集索引,另一種是兩者不同的非聚集索引。除此之外,還有唯一索引、包含索引、索引視圖、全文索引等。3.3.3SQLServer的數(shù)據庫對象
一個SQLServer數(shù)據庫中,除過包含一組存儲數(shù)據的表對象之外,一般還包括其他幾種對象,如視圖、索引、觸發(fā)器和存儲過程等。這些對象用于保存SQLServer數(shù)據庫的基本信息以及用戶自定義的數(shù)據操作等,以便更好地操縱數(shù)據庫中的數(shù)據。實際上,數(shù)據庫系統(tǒng)的任務不僅僅是保存數(shù)據,更重要的是通過各種數(shù)據操縱手段來利用數(shù)據,這也是它有別于數(shù)據文件等其他數(shù)據存儲系統(tǒng)的地方。
注:SQLServer中的數(shù)據庫實際上是最高層對象,大部分其他對象都是數(shù)據庫對象的子對象。從技術角度上說,數(shù)據庫服務器也可以看做對象,但按實際“編程”的觀點來看,不便稱其為對象。
1.視圖
視圖也是由字段與記錄構成的一種表。視圖中的數(shù)據是從基本表中查詢得到的。也就是說,視圖是一種虛擬表,它實際上只是保存起來的一套查詢規(guī)則,其中的內容全部來源于運行時從數(shù)據庫中已有的表(稱為基表或源表)中按規(guī)則取出來的。視圖主要為查詢數(shù)據提供方便并提高數(shù)據庫的安全性。例如,為了查詢某些學生選修的某些課程的考試成績,需要同時在以下三個表中檢索:
學生(學號,姓名,班級,…)
課程(課程號,課程名,學分)
成績(學號,課程號,分數(shù))再將檢索得到的結果按照
姓名,課程名,分數(shù)
的形式打印出來。如果按照關系模式
考試成績(姓名,課程名,分數(shù))
創(chuàng)建一個名為“考試成績”的視圖,則每次進行類似查詢時只需要在這個視圖中檢索。這樣不僅查詢方便,而且可以隱藏“學生”、“課程”和“成績”三個基表,提高數(shù)據庫操作的安全性。
視圖的使用與基表大體相同。
2.存儲過程
存儲過程可按字面意義理解為存儲起來的操縱數(shù)據表的過程。實際上,存儲過程確實就是把對數(shù)據表操作的方法有機地組織起來的一個對象。存儲過程是獨立于表而存在的。使用存儲過程可以完善應用程序,提高應用程序的運行效率并提高數(shù)據庫的安全性。一個存儲過程通常是一組SQL語句(SQLServer版稱為Transact-SQL)有機結合而成的一個邏輯單元,其中包括變量、參數(shù)、選擇結構和循環(huán)結構等程序的一般構件。通過存儲過程可以完成數(shù)據表中數(shù)據的添加、刪除、修改、查詢等基本操作以及數(shù)據表的判斷等較為復雜的操作。與向服務器發(fā)送單條語句相比,使用存儲過程有許多優(yōu)點。例如,在使用過程中,可以用較短的存儲過程名替代較長的字符串文本,減少存儲過程中的運行代碼所需的網絡信息流量;可以預先優(yōu)化和預編譯,從而節(jié)省存儲過程每次運行的時間;可以隱藏數(shù)據庫的復雜性,使得用戶更方便地操作;等等。
3.觸發(fā)器
觸發(fā)器是一種特殊的存儲過程,它與表格緊密相連,可以看做表格定義的補充。當用戶修改指定表或視圖中的數(shù)據時,觸發(fā)器就會自動執(zhí)行。觸發(fā)器基于一個表創(chuàng)建,但可針對多個表來操作,故常用于實現(xiàn)復雜的規(guī)則。
觸發(fā)器是確保數(shù)據表數(shù)據一致性的重要的數(shù)據庫對象之一,通過觸發(fā)器可以完成諸如向一個表插入數(shù)據的同時向另一個表插入數(shù)據,或者刪除另一個表中數(shù)據的操作。但是,使用觸發(fā)器也要慎重,如果數(shù)據庫中存在大量的觸發(fā)器,則會影響操作時的效率。
4.用戶和角色
用戶是獲得了數(shù)據庫存取權限的使用者。角色是一組數(shù)據庫用戶的集合。如果獲得了對于SQLServer實例的訪問權限,則被標識為一個登錄名。如果獲得了數(shù)據庫的訪問權限,則標識為數(shù)據庫用戶。數(shù)據庫用戶可以是基于登錄名的,也可以創(chuàng)建為不基于登錄名的。
可以給具有數(shù)據庫訪問權限的用戶授予訪問數(shù)據庫中對象的權限。訪問權限可以分別授予各個用戶,但最好創(chuàng)建數(shù)據庫角色并將具有相同權限的用戶添加到同一角色中,然后對角色授予訪問權限。同一角色中的所有用戶具有相同的權限。3.4.1通過圖形用戶界面創(chuàng)建數(shù)據庫
使用數(shù)據庫之前,必須先創(chuàng)建數(shù)據庫并生成相應的數(shù)據文件和日志文件。隨后在所創(chuàng)建的數(shù)據庫中,按照數(shù)據庫設計所得到的一系列關系模式創(chuàng)建一個個的表以及表與表之間的聯(lián)系,就基本形成了一個數(shù)據庫的框架。當然,實際可用的數(shù)據庫在數(shù)據入庫以及創(chuàng)建了視圖、索引、存儲過程等各種數(shù)據庫對象之后才能成型。
注:SQLServer中,新建的數(shù)據庫實際上是根據model數(shù)據庫中保存的數(shù)據庫模板創(chuàng)建的,也就是說它是model數(shù)據庫的一個副本。
3.4創(chuàng)建SQLServer數(shù)據庫大多數(shù)使用數(shù)據庫的人員都使用SQLServerManagementStudio工具。ManagementStudio工具有一個圖形用戶界面,用于創(chuàng)建數(shù)據庫和數(shù)據庫中的對象。ManagementStudio還具有一個查詢編輯器,用于通過編寫Transact-SQL語句與數(shù)據庫進行交互。ManagementStudio可以從SQLServer安裝磁盤進行安裝,也可以從MSDN中下載。
在SQLServerManagementStudio中,用戶可以方便地通過可視化方法創(chuàng)建數(shù)據庫。
【例3-5】創(chuàng)建“教學”數(shù)據庫。
(1)打開SQLServerManagementStudio。
①選擇“開始”→“程序”→“MicrosoftSQLServer2008”→“SQLServerManagementStudio”菜單項,打開SQLServerManagementStudio窗口。
②使用“Windows身份驗證”連接到SQLServer2008數(shù)據庫實例。
(2)打開“新建數(shù)據庫”對話框。
在“對象資源管理器”窗格中展開服務器,然后右擊“數(shù)據庫”結點并選擇快捷菜單中的“新建數(shù)據庫”命令,打開“新建數(shù)據庫”對話框,如圖3-10所示。
圖3-10中,“選擇頁”下有三個選項:常規(guī)、選項和文件組。完成了這三個選項的設置,就完成了數(shù)據庫的創(chuàng)建工作。
常規(guī)——“數(shù)據庫文件”列表中包括兩行,分別是數(shù)據文件和日志文件,其中各字段的意義如下:圖3-10“新建數(shù)據庫”對話框
(3)定制并創(chuàng)建“dbCourses”數(shù)據庫。
①在“新建數(shù)據庫”對話框中“常規(guī)”頁的“數(shù)據庫名稱”文本框中輸入數(shù)據庫名稱“dbCourses”。
注:數(shù)據庫的名稱必須遵循SQLServer2008的命名規(guī)則,如長度在1~128個字符之間,不能使用某些字符(如*#?“<>|),不能包含SQLServer2008的保留字(如master)等。
②如果接受所有默認值,可以單擊“確定”按鈕結束創(chuàng)建工作。本例中的“dbCourses”數(shù)據庫不用默認值,因此還需執(zhí)行以下兩步。
③在“所有者”下拉列表框中選擇數(shù)據庫所有者:單擊“瀏覽”按鈕,打開“查找對象”對話框,如圖3-11所示,選擇登錄對象sa作為數(shù)據庫的所有者。圖3-11查找對象對話框注:數(shù)據庫的所有者是對數(shù)據庫有完全操作權限的用戶。默認值表示當前登錄Windows系統(tǒng)的是管理員賬戶。
④選中“使用全文索引”復選框,啟用數(shù)據庫的全文搜索。這樣數(shù)據庫中的變長復雜數(shù)據類型列也可以建立索引。
⑤單擊“確定”按鈕,結束創(chuàng)建工作。
創(chuàng)建數(shù)據庫的工作完成之后,選擇“視圖”→“刷新”菜單項,則在對象資源管理器的數(shù)據庫結點之下將出現(xiàn)剛創(chuàng)建的dbCourses數(shù)據庫結點,如圖3-12(a)所示。(a)
(b)圖3-12新建數(shù)據庫的文件與結點3.4.2通過圖形用戶界面創(chuàng)建數(shù)據庫中的表
創(chuàng)建表的首要任務是定義表的結構,即規(guī)定表頭的內容和格式。在SQLServer中,一個數(shù)據庫中可以創(chuàng)建多個表,而且每個表中包含的列的數(shù)目多達1024個。列的數(shù)目及表的總大小僅受限于可用的硬盤存儲容量。另外,每列的寬度可以達到8092字節(jié),而且image、text或者ntext類型的數(shù)據不受此限制。
注:默認狀態(tài)下,只有系統(tǒng)管理員和數(shù)據庫擁有者(DBO)可以創(chuàng)建新表,但這兩類人可以授權其他人來完成這一任務。
【例3-6】創(chuàng)建“教學”數(shù)據庫中的“學生”表并輸入數(shù)據。
要創(chuàng)建的“學生”表結構如下:
(1)打開“教學”數(shù)據庫。
①選擇“開始”→“程序”→“MicrosoftSQLServer2005”→“SQLServerManagementStudio”菜單項,打開SQLServerManagementStudio窗口。
②使用“Windows身份驗證”連接到SQLServer2008數(shù)據庫實例。
③在“對象資源管理器”窗格中展開服務器,展開下屬的“數(shù)據庫”結點,再展開下屬的“dbCourses”結點。
(2)打開“新建表”對話框。右擊dbCourses結點下屬的“表”結點,選擇快捷菜單中的“新建表”命令,打開表設計器對話框,如圖3-13所示。圖3-13SQLServer用戶界面及表設計器對話框
(3)在表設計器對話框中定義表的結構。定義表的結構意為指定表中所有字段的字段名、數(shù)據類型、寬度等。需要按照預先設計的表的結構,逐個地進行。
●輸入字段名:字段名在表中是唯一的而且必須遵守SQLServer的命名規(guī)則。
●選擇性地輸入數(shù)據類型,并在類型名后面的括號中輸入字段寬度,如char(10)表示寬度為10的字符串;float(10,3)表示總寬度為10、小數(shù)點后有3位的浮點數(shù)。
●必要時勾選“允許Null值”復選框。
注:SQLServer中,char(n)類型用于存儲固定長度的字符,最多可存儲8000個字符,每個字符占一個字節(jié)。nchar(n)類型也用于存儲固定長度的字符,最多可存儲4000個字符,每個字符占兩個字節(jié)。
(4)設置主鍵。右擊要設置為主鍵的“學號”字段的行選擇器(該行最前面的小方塊),選擇快捷菜單中的“設置主鍵”命令,則該字段會帶上鑰匙狀標記。
如果主鍵為多個字段,按住Ctrl鍵并逐個單擊各字段,然后右擊選擇命令,即可設置這幾個字段共同體為主鍵。
設計好的“學生”表的結構如圖3-14(a)所示,其中“姓名”字段的屬性如圖3-14(b)所示。(a)
(b)圖3-11“學生”表的結構及其中“姓名”字段的屬性
(5)設置CHECK約束。
①右擊要設置CHECK約束的“出生年月”字段名,選擇快捷菜單中的“CHECK約束”命令,打開“CHECK約束”對話框,如圖3-15(a)所示。
②單擊“常規(guī)”欄“表達式”格右側的…按鈕,打開“CHECK約束表達式”對話框,如圖3-15(b)所示。
③輸入表達式:
出生年月>'1982-01-01'
或者(輸入上面的表達式后,自動變?yōu)橄旅娴谋磉_式)
([出生年月]>'1982-01-01')
并單擊“確定”按鈕,保存CHECK約束。
注:CHECK約束可以和一個列關聯(lián),也可以和表關聯(lián),可以檢查一個列的值相對于另外一個列的值,只要這些列都在同一個表中以及值是在更新或者插入的同一行中。(a)
(b)圖3-15“CHECK約束”及“CHECK約束表達式”對話框
(6)保存設計好的表。
①單擊工具欄上的“保存”或者選擇“文件”→“保存”→“另存為”菜單項,打開“另存為”對話框。
②在彈出的“選擇名稱”對話框的“輸入表名”文本框中,輸入表名“學生”,并單擊“確定”按鈕將其保存。
(7)輸入“學生”表中的數(shù)據。
①右擊dbo.學生結點,選擇快捷菜單中的“編輯前200行”命令,打開輸入表中數(shù)據的對話框。
②選擇第一行中的文本框,此時選擇器將提示該行正處于編輯將態(tài)。在該對話框中根據各個列的屬性輸入數(shù)據。還可以在該對話框中查看表中的所有數(shù)據行,也可向表中添加、刪除數(shù)據和修改表中已有的數(shù)據。本例中,輸入如圖3-16所示的數(shù)據。圖3-16輸入“學生”表中數(shù)據的對話框圖3-17輸入錯誤數(shù)據時系統(tǒng)顯示的消息框3.4.3創(chuàng)建數(shù)據庫關系圖
注:如果多人同時使用數(shù)據庫關系圖工具來操作同一個數(shù)據庫,并且?guī)讉€人所做的更改作用到了同一個表上,則最后保存的操作結果覆蓋先保存的內容而決定最終的表的布局。
1.數(shù)據庫關系圖的顯示
在數(shù)據庫關系圖中,顯示了表、表中的字段名列表以及表與表之間的關系。用鑰匙狀圖案標記的字段為主鍵,如圖3-18所示。實際上,在這個圖中也可以對顯示出來的表中的字段進行定義,例如,可以修改列的名稱、數(shù)據類型、長度和注釋等。圖3-18數(shù)據庫關系圖默認形式的數(shù)據庫關系圖中,每個表都由三個不同的部分構成。
(1)標題欄:用于顯示表的名稱。如果修改了某個表之后尚未保存它,則表名末尾將顯示一個星號(?*?)。
(2)行選擇器:可以單擊行選擇器來選擇表中的字段。如果該字段是表的主鍵,則行選擇器上顯示鑰匙狀符號。
(3)字段名列表:字段名列表僅在表的某些視圖中可見。
2.數(shù)據庫關系圖與數(shù)據庫中的表
可以為一個數(shù)據庫創(chuàng)建多個數(shù)據庫關系圖。每個數(shù)據庫表都可以出現(xiàn)在任意數(shù)目的關系圖中。這樣,便可以創(chuàng)建不同的關系圖使數(shù)據庫的不同部分可視化或者強調設計的不同方面。例如,可以創(chuàng)建一個大型關系圖來顯示所有的表和字段,再創(chuàng)建一個較小的關系圖來顯示所有表但不顯示字段。
SQLServer的數(shù)據庫關系圖工具除過可以創(chuàng)建關系圖之外,還可以用于添加表、修改表、構建關系或者添加索引等操作。在其中所做的任何更改都會先保存在內存中,然后通過保存命令提交給數(shù)據庫。如果一個正在編輯的數(shù)據庫關系圖中包含了某個已經刪除了的表,則當涉及該表的某些更改尚未保存時,該表將會重建。如果該表未曾更改,則重新打開關系圖后,可以看到它被刪除了。
如果需要在SQLServer中更改表的結構,則必須先刪除原來的表,然后重新創(chuàng)建新表。如果強行更改,則會出現(xiàn)提示信息:“不允許保存更改。您所做的更改要求刪除并重新創(chuàng)建以下表。您對無法重新創(chuàng)建的表進行了更改或者啟用了“阻止保存要求重新創(chuàng)建表的更改”選項。
去掉這個提示并使得所做的修改保存到數(shù)據庫中的方法是:
(1)在SQLServer主窗口中選擇“工具”→“選項”→“選項”菜單項,打開“選項”對話框,如圖3-19所示。
(2)展開Designers結點,選擇“表設計器和數(shù)據庫設計器”項,并在右側的“表選項”欄中取消對“阻止保存要求重新創(chuàng)建表的更改”項的選擇。圖3-19“選項”對話框
【例3-7】創(chuàng)建“教學”數(shù)據庫關系圖。
創(chuàng)建了“教學”數(shù)據庫中的所有表之后,就可以按照以下步驟創(chuàng)建其數(shù)據庫關系圖了。
(1)打開編輯數(shù)據庫關系圖的對話框。
①右擊數(shù)據庫關系圖結點,選擇快捷菜單中的“新建數(shù)據庫關系圖”命令。
②當SQLServer顯示如圖3-20(a)所示的消息框時,單擊“是”按鈕,打開編輯數(shù)據庫關系圖的對話框以及“添加表”對話框(如圖3-20(b)所示)。(a)
(b)圖3-20編輯數(shù)據庫關系圖的對話框
(2)在“添加表”對話框中,全選表名列表中的所有表名,將“教學”數(shù)據庫中的幾個表都放到編輯數(shù)據庫關系圖的對話框中。
(3)編輯數(shù)據庫關系圖。可以采用拖放的方式,分別建立兩個表之間的一對多聯(lián)系。例如,將“班級”表和“學生”表通過共有的“班號”字段連接起來的方法如下:
①將“班級”表中的“班號”字段(主鍵)往“學生”表的“班號”字段上拖放。
②在彈出的“表和列”對話框(圖3-21(a))中,確認兩個表名以及共有字段名無誤后,單擊“確定”按鈕。
③查看彈出的“外鍵關系”對話框(圖3-21(b)),確認無誤后單擊“確定”按鈕。(a)
(b)圖3-21建立兩個表之間聯(lián)系的對話框如果操作無誤,則兩表之間將會出現(xiàn)相應的連線,且“班級”表(主鍵表)一端以鑰匙標記,“學生”表(外鍵表)一端以∞標記。
完整的“教學”數(shù)據庫關系圖如圖3-22所示。圖3-22“教學”數(shù)據庫關系圖3.4.4創(chuàng)建索引
1.聚集索引與非聚集索引
在創(chuàng)建索引前,首先要確定索引所使用的列。索引可以在一個列上創(chuàng)建,稱之為簡單索引;也可以在多個列上創(chuàng)建,稱之為組合索引。列的選擇由它所在的環(huán)境以及其中所保存的數(shù)據來決定。索引中數(shù)據的邏輯順序與數(shù)據在表中的物理順序有時相同有時不同,可據此將索引分為聚集索引和非聚集索引兩種。聚集索引定義了數(shù)據在表中存儲的物理順序。如果聚集索引中定義了多個列,則數(shù)據將按這些列來排序并存儲:先按第一列指定的順序,再按第二列指定的順序,依此類推。顯然,一個表中的數(shù)據只能按照一種物理順序來存儲,因此,一個表中只能定義一個聚集索引。插入數(shù)據時,SQLServer使用聚集索引找到插入位置,并將此處及此后的數(shù)據一起后移,然后將所輸入的數(shù)據連同索引鍵值一同插入空出的位置,從而保持了應有的順序。可以想見,如果某個列經常需要更新,則不宜放入聚集索引,否則會因經常改變數(shù)據的存儲位置而導致過多的處理開銷。另外,由于聚集索引指定的數(shù)據邏輯順序與其實際存儲順序相同,故索引提取數(shù)據時需要進行的輸入/輸出操作次數(shù)比非聚集索引少。因此,如果表中只有一個索引,則應確保它是聚集索引。
注:只有當表包含聚集索引時,其中的數(shù)據行才按排序順序存儲。如果表具有聚集索引,則稱之為聚集表。如果表沒有聚集索引,則其數(shù)據行存儲在一個稱為堆的無序結構中。非聚集索引中數(shù)據的邏輯結構獨立于數(shù)據在表中的物理結構。非聚集索引由一系列依序編排的索引值(一般為鍵)以及各索引值自帶的指向表中數(shù)據的物理位置的指針構成。它不會改變表中數(shù)據的實際存儲順序,但可通過每個索引值自帶的指針找到相應的數(shù)據。因此,一個表中同時可以存在多個非聚集索引。顯然,當需要以多種方式檢索數(shù)據時,創(chuàng)建多個適應不同檢索方式的非聚集索引是有好處的。
注:非聚集索引中的索引行指向數(shù)據行的指針稱為行定位器。行定位器的結構取決于數(shù)據是存儲在堆中還是聚集表中。對于堆,行定位器是指向行的指針。對于聚集表,行定位器是聚集索引鍵。
2.唯一索引與主鍵索引
無論是聚集索引還是非聚集索引,都可以設置為“索引值不能重復”,稱之為唯一索引。唯一索引不允許兩行具有相同的索引值(包括NULL值在內)。如果現(xiàn)有數(shù)據中存在重復的索引值,則大多數(shù)數(shù)據庫都會阻止新創(chuàng)建的唯一索引與表保存在一起。當新數(shù)據會使表中的索引值重復時,數(shù)據庫也拒絕接受該數(shù)據。
在一個表中定義了主鍵之后,將會自動創(chuàng)建主鍵索引。主鍵索引是唯一索引的特殊類型,它要求主鍵中的每個值是唯一的。當在查詢中使用主鍵索引時,它還允許快速訪問數(shù)據。
注:復合索引是基于多個字段創(chuàng)建的索引。它也可以是唯一索引,即字段組合不能重復,但單獨字段值可以重復。
3.索引和統(tǒng)計信息
獲取數(shù)據時,SQLServer會根據當時情況采用最好的方法進行操作,并將結果返回給請求它的查詢。例如,在提取相同的數(shù)據且有多個索引可供選擇時,SQLServer會根據相關信息選擇其中一個;甚至在有相應索引可用的情況下,SQLServer也可能會通過逐行掃描的方法來提取數(shù)據。做出這些選擇的依據是統(tǒng)計信息。
SQLServer會為索引中包含的每一列都保存統(tǒng)計信息。這些統(tǒng)計信息在經過了一定的時間或進行了一定次數(shù)的數(shù)據插入和更改之后會被更新。因此,如果在已輸入了數(shù)據的表中創(chuàng)建了索引或者修改了已有的索引,但卻未能使SQLServer更新表上的統(tǒng)計信息,那么,SQLServer在提取數(shù)據時,可能會因未能得到正確的信息而采用了低效率的操作方式。
SQLServer會在必要時按照預先的設置自動更新統(tǒng)計信息。例如,可在創(chuàng)建索引時指定“重新計算統(tǒng)計信息”,也可通過圖形用戶界面或者SQL語言中的命令來“手動更新”。
【例3-8】為“教學”數(shù)據庫中的“學生”表創(chuàng)建索引。
通過SQLServer的圖形用戶界面進行創(chuàng)建非常方便,但必須預先考慮以下幾個問題:
●要創(chuàng)建的索引中,需要包含哪些列?例如,如果需要按班級顯示“學生”表中的所有記錄,則索引中包含“班號”字段即可,如果還需要班內按學號顯示,則再包含“學號”字段即可。
●一個列中,是否只包含唯一的值?例如,在“學生”表中,一個班級通常有二三十名甚至更多的學生,一般不宜創(chuàng)建基于“班號”的唯一索引。●是否創(chuàng)建聚集索引?例如,“學生”表中的主鍵是學號,該表中的記錄按“學號”排序是很自然的。如果要創(chuàng)建基于“班號”的聚集索引,則該表中的記錄將改為按“班號”來排序。因此,創(chuàng)建索引之前要想清楚,這樣做是否有利于大多數(shù)操作。
本例按以下步驟創(chuàng)建一個基于“班號”的非聚集索引。
(1)打開“索引/鍵”對話框。右擊“學生”表結點,選擇快捷菜單中的“索引/鍵”命令,打開“索引/鍵”對話框,如圖3-23(a)所示。
(2)定制索引。
①單擊“添加”按鈕,在左側的索引列表中添加一個自動命名的索引項。
②單擊右側“常規(guī)”欄中的“列-索引”網格中的…按鈕,打開“索引列”對話框。
③在“列名”欄選擇“班號”和“學號”,“排序順序”欄選擇默認的“升序”值,如圖3-23(b)所示。
單擊“確定”按鈕后,“索引/鍵”對話框中顯示如圖3-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高速鐵路客車軸承項目建議書
- 2025年細胞毒活苗項目發(fā)展計劃
- 旅行社車輛調度準則
- 建筑供暖單項施工合同
- 外墻綠化施工安全合同
- 零售供應鏈資金關鍵控制政策
- 通信網絡鋪設工程合同會簽表
- 保險公司停電客戶服務方案
- 2024投標居間服務合同
- 市政道路改造工程合同糾紛模板
- 市場營銷試題(含參考答案)
- 2023年新高考(新課標)全國2卷數(shù)學試題真題(含答案解析)
- 貝雷片-潮白新河鋼棧橋及鋼平臺計算說明書
- VF程序設計知識要點
- 燃氣-蒸汽聯(lián)合循環(huán)機組詳介
- 初中信息技術課程教學設計案例
- 計價格[1999]1283號_建設項目前期工作咨詢收費暫行規(guī)定
- 植物與植物生理課程教學大綱
- 展廳展館中控系統(tǒng)解決方案
- 兒童福利個人工作總結報告
- 《夜宿山寺》
評論
0/150
提交評論