官术网_书友最值得收藏!

2.1 SQL Server數據庫基本概念

對SQL Server的數據庫有兩種觀點,即用戶觀點和數據庫管理員觀點。觀點不同,對數據庫的看法也不同。

2.1.1 邏輯數據庫

SQL Server數據庫是存儲數據的容器,是一個由存放數據的表和支持這些數據的存儲、檢索、安全性和完整性的邏輯成分所組成的集合。用戶觀點將數據庫稱為邏輯數據庫,組成數據庫的邏輯成分稱為數據庫對象。SQL Server 2008的數據庫對象主要包括表、視圖、索引、存儲過程、觸發器和約束等。

用戶經常需要在T-SQL中引用SQL Server對象并對其進行操作,如對數據庫表進行查詢和數據更新等,在其所使用的T-SQL語句中需要給出對象的名稱。用戶可以給出兩種對象名,即完全限定名和部分限定名。

(1)完全限定名。在SQL Server 2008中,完全限定名是對象的全名,包括4個部分:服務器名、數據庫名、數據庫架構名和對象名,其格式為

        server.database.scheme.object

在SQL Server 2008上創建的每一個對象都必須有一個唯一的完全限定名。

說明:在SQL Server 2000中,用戶和架構的概念是相同的;而在SQL Server 2005及之后的版本中,用戶和架構已經明確地分離了開來。從SQL Server 2005開始,每個對象都屬于一個數據庫架構。數據庫架構是一個獨立于數據庫用戶的非重復命名空間。一般可以將架構視為對象的容器。可以在數據庫中創建和更改架構,并且可以授予用戶訪問架構的權限。任何用戶都可以擁有架構,并且架構所有權可以轉移。一個架構只能有一個所有者,所有者可以是用戶、數據庫角色或應用程序角色。同一個用戶可以被授權訪問多個架構。多個數據庫用戶可以共享單個默認架構。由于架構與用戶獨立,故刪除用戶不會刪除架構中的對象。

(2)部分限定名。在使用T-SQL編程時,使用全名往往很煩瑣且沒有必要,所以常省略全名中的某些部分,對象全名的4個部分中的前3個部分均可以省略,當省略中間的部分時,圓點符“.”不可省略。把只包含對象完全限定名中的一部分的對象名稱為部分限定名。當用戶使用對象的部分限定名時,SQL Server可以根據系統的當前工作環境確定對象名稱中省略的部分。

在部分限定名中,未指出的部分使用以下默認值。

服務器:默認為本地服務器。

數據庫:默認為當前數據庫。

數據庫架構名:默認為dbo。

例如,以下是一些正確的對象部分限定名:

        server.database...object             /*省略架構名*/
        server.. scheme.object             /*省略數據庫名*/
        database. scheme.object            /*省略服務器名*/
        server…object                  /*省略架構名和數據庫名*/
        scheme.object                   /*省略服務器名和數據庫名*/
        object                        /*省略服務器名、數據庫名和架構名*/

說明:用戶所使用的SQL Server對象名是邏輯名,其命名遵循T-SQL常規標識符命名規則,最長為30個字符,且區分大小寫。

下面大致介紹一下SQL Server 2008中所包含的常用數據庫對象,有關數據庫對象的具體內容將在后面的章節中一一介紹。

① 表:表是SQL Server中最主要的數據庫對象,它是用來存儲和操作數據的一種邏輯結構。表由行和列組成,因此也稱為二維表。表是在日常工作和生活中經常使用的一種表示數據及其關系的形式。

② 視圖:視圖是從一個或多個基本表中引出的表。數據庫中只存放視圖的定義而不存放視圖對應的數據,這些數據仍存放在導出視圖的基本表中。

由于視圖本身并不存儲實際數據,因此也可以稱之為虛表。視圖中的數據來自定義視圖的查詢所引用的基本表,并在引用時動態生成數據。當基本表中的數據發生變化時,從視圖中查詢出來的數據也隨之改變。視圖一經定義,就可以像基本表一樣被查詢、修改、刪除和更新了。

③ 索引:索引是一種不用掃描整個數據表就可以對表中的數據實現快速訪問的途徑,它是對數據表中的一列或者多列數據進行排序的一種結構。

表中的記錄通常按其輸入的時間順序存放,這種順序稱為記錄的物理順序。為了實現對表記錄的快速查詢,可以對表的記錄按某個或某些屬性進行排序,這種順序稱為邏輯順序。

索引是根據索引表達式的值進行邏輯排序的一組指針,它可以實現對數據的快速訪問,索引是關系數據庫的內部實現技術,它被存放在存儲文件中。

④ 約束:約束機制保障了SQL Server 2008中數據的一致性與完整性,具有代表性的約束就是主鍵和外鍵。主鍵約束當前表記錄的唯一性,外鍵約束當前表記錄與其他表的關系。

⑤ 存儲過程:存儲過程是一組為了完成特定功能的SQL語句集合。這個語句集合經過編譯后存儲在數據庫中,存儲過程具有接受參數、輸出參數、返回單個或多個結果以及返回值的功能。存儲過程獨立于表存在。

存儲過程有與函數類似的地方,但它又不同于函數,例如,它不返回取代其名稱的值,也不能直接在表達式中使用。

① 觸發器:觸發器與表緊密關聯。它可以實現更加復雜的數據操作,更加有效地保障數據庫系統中數據的完整性和一致性。觸發器基于一個表創建,但可以對多個表進行操作。

② 默認值:默認值是在用戶沒有給出具體數據時,系統所自動生成的數值。它是SQL Server 2008系統確保數據一致性和完整性的方法。

③ 用戶和角色:用戶是指對數據庫有存取權限的使用者;角色是指一組數據庫用戶的集合。這兩個概念類似于Windows XP的本地用戶和組的概念。

④ 規則:規則用來限制表字段的數據范圍。

⑤ 類型:用戶可以根據需要在給定的系統類型之上定義自己的數據類型。

⑥ 函數:用戶可以根據需要在SQL Server 2008上定義自己的函數。

2.1.2 物理數據庫

從數據庫管理員觀點看,數據庫是存儲邏輯數據庫的各種對象的實體。這種觀點將數據庫稱為物理數據庫。SQL Server 2008的物理數據庫構架主要內容包括文件及文件組,還有頁和盤區等,它們描述了SQL Server 2008如何為數據庫分配空間。在創建數據庫時,了解SQL Server 2008如何存儲數據也是很重要的,這有助于規劃分配給數據庫的磁盤容量。

1.頁和區

SQL Server 2008中有兩個主要的數據存儲單位:頁和區。

頁是SQL Server 2008中用于數據存儲的最基本單位。每個頁的大小是8 KB,也就是說, SQL Server 2008中每1 MB的數據文件可以容納128頁。每頁的開頭是96 B的標頭,用于存儲有關頁的系統信息。緊接著標頭存放的是數據行,數據行按順序排列。數據庫表中的每一行數據都不能跨頁存儲,即表中的每一行數據字節數不能超過8192。頁的末尾是行偏移表,頁中的每一行在偏移表中都有一個對應的條目。每個條目記錄著對應行的第一個字節與頁首部的距離。

區是用于管理空間的基本單位。每8個連接的頁組成一個區,大小為64 KB,即每1 MB的數據庫就有16個區。區用于控制表和索引的存儲。

2.數據庫文件

SQL Server 2008所使用的文件包括以下三類文件。

(1)主數據文件。主數據文件簡稱主文件,正如其名字所示,該文件是數據庫的關鍵文件,包含了數據庫的啟動信息,并且存儲數據。每個數據庫必須有且僅能有一個主文件,其默認擴展名為.mdf。

(2)輔助數據文件。輔助數據文件簡稱輔(助)文件,用于存儲未包括在主文件內的其他數據。輔助文件的默認擴展名為.ndf。輔助文件是可選的,根據具體情況,可以創建多個輔助文件,也可以不使用輔助文件。一般當數據庫很大時,有可能需要創建多個輔助文件。而當數據庫較小時,則只需要創建主文件而不需要創建輔助文件。

(3)日志文件。日志文件用于保存恢復數據庫所需的事務日志信息。每個數據庫至少有一個日志文件,也可以有多個,日志文件的擴展名為.ldf。日志文件的存儲與數據文件不同,它包含一系列記錄,這些記錄的存儲不以頁為存儲單位。

說明:SQL Server 2008允許在創建數據庫時不使用上述的.mdf、.ndf和.ldf做文件擴展名,但使用默認的擴展名有助于識別文件。

在創建一個數據庫后,該數據庫至少包含上述的主文件和日志文件。這些文件的名字是操作系統文件名,它們不是由用戶直接使用的,而是由系統使用的,不同于數據庫的邏輯名。

3.文件組

文件組是由多個文件組成的,為了管理和分配數據而將它們組織在一起。通常可以為一個磁盤驅動器創建一個文件組,然后將特定的表、索引等與該文件組相關聯,那么對這些表的存儲、查詢和修改等操作都在該文件組中。

使用文件組可以提高表中數據的查詢性能。在SQL Server 2008中有兩類文件組。

(1)主文件組。主文件組包含主要數據文件和任何沒有明確指派給其他文件組的其他文件。管理數據庫的系統表的所有頁均分配在主文件組中。

(2)用戶定義文件組。用戶定義文件組是指在CREATE DATABASE或ALTER DATABASE語句中使用FILEGROUP關鍵字指定的文件組。

每個數據庫中都有一個文件組作為默認文件組運行。若在SQL Server 2008中創建表或索引時沒有為其指定文件組,那么將從默認文件組中進行存儲頁分配、查詢等操作。用戶可以指定默認文件組,如果沒有指定默認文件組,則主文件組是默認文件組。

注意:若不指定用戶定義文件組,則所有數據文件都包含在主文件組中。

在設計文件和文件組時,一個文件只能屬于一個文件組。只有數據文件才能作為文件組的成員,日志文件不能作為文件組成員。

2.1.3 系統數據庫和用戶數據庫

在SQL Server 2008中有兩類數據庫:系統數據庫和用戶數據庫。

系統數據庫存儲有關SQL Server的系統信息,它們是SQL Server 2008管理數據庫的依據。如果系統數據庫遭到破壞,那么SQL Server將不能正常啟動。在安裝SQL Server 2008時,系統將創建4個可見的系統數據庫:master、model、msdb和tempdb。

(1)master數據庫包含了SQL Server 2008的登錄賬號、系統配置、數據庫位置及數據庫錯誤信息等,控制用戶數據庫和SQL Server的運行。

(2)model數據庫為新創建的數據庫提供模板。

(3)msdb數據庫為“SQL Server代理”調度信息和作業記錄提供存儲空間。

(4)tempdb數據庫為臨時表和臨時存儲過程提供存儲空間,所有與系統連接的用戶的臨時表和臨時存儲過程都存儲于該數據庫中。

每個系統數據庫都包含主數據文件和主日志文件。擴展名分別為.mdf和.ldf,例如master數據庫的兩個文件分別為master.mdf和master.ldf。

用戶數據庫是用戶創建的數據庫。兩類數據庫結構相同,文件的擴展名也相同。本書中創建的都是用戶數據庫。

主站蜘蛛池模板: 灌阳县| 蛟河市| 青阳县| 交口县| 方山县| 吉林省| 吉水县| 潜山县| 南陵县| 金华市| 长兴县| 徐州市| 乌兰浩特市| 九龙坡区| 西宁市| 雷波县| 沙河市| 澎湖县| 鹤壁市| 辽阳市| 涟源市| 怀远县| 天峻县| 平塘县| 平遥县| 苏尼特右旗| 隆回县| 军事| 全南县| 三亚市| 太保市| 宜兰市| 通州区| 响水县| 兰溪市| 忻城县| 庐江县| 崇阳县| 克拉玛依市| 普兰店市| 共和县|