《SQL Server 從入門到精通》學習筆記

《SQL Server 從入門到精通》

第1章 數據庫基礎

1.2 數據庫的體系結構

1.2.1 數據庫三級模式結構

  1. 模式
    模式也稱邏輯模式或概念模式,它是數據庫中全體數據的邏輯結構和特徵的描述,是全部用戶的公共數據視圖。一個數據庫只有一個模式,模式處於三級結構的中間層。
    定義模式時不只要定義數據的邏輯結構,並且要定義數據之間的聯繫,定義與數據有關的安全性完整性要求
  2. 外模式
    外模式也稱用戶模式,它是數據庫用戶(包括應用程序員和最終用戶)可以看見和使用的局部數據的邏輯結構和特徵的描述是數據庫用戶的數據視圖是與某一應用有關的數據的邏輯表示。外模式是模式的子集。一個數據庫能夠有多個外模式。
    外模式是保證數據安全性的一個有力措施。
  3. 內模式
    內模式也稱存儲模式,一個數據庫只有一個內模式。它是數據物理結構和存儲方式的描述,是數據在數據庫內部的表示方式

1.2.2 三級模式之間的映射

爲了可以在內部實現數據庫的3個抽象層次的聯繫和轉換,數據庫管理系統在三級模式之間提供了兩層映射。html

  1. 外模式/模式映射
    對應於同一個模式能夠有任意多個外模式。對於每個外模式,數據庫系統都有一個外模式/模式映射。當模式改變時,由數據庫管理員對各個外模式/模式映射做相應的改變,可使外模式保持不變。依據數據外模式編寫的應用程序就不用修改,保證數據與程序的邏輯獨立性
  2. 模式/內模式映射
    模式/內模式映射惟一,定義了數據庫的全局邏輯結構與存儲結構之間對應關係。當數據庫的存儲結構改變時,由數據庫管理員對模式/內模式映射做相應改變,可使模式保持不變,應用程序相應地也不作變更。保證數據與程序的物理獨立性

1.3 數據模型

數據模型是一種對客觀事物抽象化的表現形式。它對客觀事物加以抽象,經過計算機來處理現實世界中的具體事物。它客觀地反映了現實世界,易於理解,與人們對外部事物描述的認識相一致。程序員

1.3.1 數據模型的概念

數據模型由數據結構、數據操做、完整性約束組成。
數據結構:是對系統靜態特徵的描述。描述對象包括數據的類型、內容、行政和數據之間的相互關係。
數據操做:是對系統動態特徵的描述,是對數據庫中各類對象實例的操做。
完整性約束:是完整性規則的集合。他定義了給定數據模型中數據及其聯繫所具備的制約和依存規則。sql

1.3.2 常見的數據模型

  1. 層次模型:用樹形結構表示實體類型及實體間聯繫的數據模型成爲層次模型。
  • 每棵樹有且僅有一個無雙親節點,稱爲根。
  • 樹中除根外全部節點有且僅有一個雙親。
  1. 網狀模型:用有向圖結構表示實體類型及實體間聯繫的數據模型成爲網狀模型。用網狀模型編寫應用程序及其複雜,數據的獨立性較差。
  2. 關係模型:以二維表來描述數據。在關係模型中,每一個表有多個字段列和記錄行,每一個字段列有固定的屬性(數字、字符、日期等)。關係模型數據結構簡單、清晰、具備很高的數據獨立性,所以是目前主流的數據庫數據模型。
  • 關係:二維表
  • 元組:二維表一行,表中的記錄
  • 屬性:二維表一列,用類型和值表示
  • :每一個屬性取值的變化範圍,如性別的域爲{男,女}

關係模型中的數據約束:數據庫

  • 實體完整性約束:約束關係的主鍵屬性值不能爲空
  • 參照完整性約束:關係之間的基本約束
  • 用戶定義的完整性約束:反應具體應用中數據的語義要求

1.3.3 關係數據庫的規範化

第一範式(1NF)、2NF、3NF、鮑依斯-科得範式(BCNF)、4NF、5NF。其中,NF是Normal Form的縮寫。通常狀況下,只要把數據規範到第三範式標準便可知足須要。安全

  • 1NF:在一個關係中,消除重複字段,且各字段都是最小的邏輯存儲單位。
  • 2NF:1NF基礎上,消去非主屬性對鍵的部分函數依賴
  • 3NF:2NF基礎上,消去非主屬性對鍵的傳遞函數依賴
  • BCNF:3NF基礎上,消去主屬性對鍵的傳遞函數依賴
  • 4NF:BCNF基礎上,消去表中的多值依賴
    詳細說明

1.3.4 關係數據庫的設計原則

  1. 數據庫內文件的數據組織應得到最大限度的共享、最小的冗餘度,消除數據及數據依賴關係中的冗餘部分,使依賴於同一個數據模型的數據達到有效的分離。
  2. 保證輸入、修改數據時數據的一致性與正確性。
  3. 保證數據與使用數據的應用程序之間得到高度獨立性。

1.3.5 實體與關係

實體是指客觀存在並可相互區別的事物,也能夠是抽象的概念或關係。實體之間有三種關係。服務器

  1. 一對一關係:表A中的一條記錄確實在表B中有且只有一條相匹配的記錄。在一對一關係中,大部分相關信息都在一個表中。
    學生與學生的身份證號
  2. 一對多關係:表A中的行能夠在表B中有許多匹配行,可是表B中的行只能在表A中有一個匹配行。
    一個學生只屬於一個班,一個班有多名學生
  3. 多對多關係:關係中的每一個表的行在相關表中具備多個匹配行。在數據庫中,多對多關係的創建是依靠第3個表(稱做鏈接表)實現的,鏈接表包含相關的兩個表的主鍵列,而後從兩個相關表的主鍵列分別建立與鏈接表中的匹配列的關係。
    一個學生能夠選擇多門課,一門課也有多名學生

詳細說明數據結構

1.4 常見關係數據庫

Oracle在並行處理、實時性、數據處理速度方面都有較好的性能。數據庫設計

第4章 建立與管理數據庫

4.1 認識數據庫

4.1.1 數據庫基本概念

關係數據庫
關係數據庫是支持關係模型的數據庫。關係模型由關係數據結構、關係操做集合和完整性約束3部分組成。函數

  1. 關係數據結構:在啊關係模型中數據結構單一,現實世界的實體以及實體間的聯繫均用關係來表示,實際上關係模型中數據結構就是一張二維表
  2. 關係操做集合:關係操做分爲關係代數、關係演算、具備關係代數和關係演算雙重特色的語言(SQL語言)
  3. 完整性約束

4.1.2 數據庫經常使用對象

  • :表是包含數據庫中全部數據的數據庫對象,由行和列組成,用於組織和存儲數據。
  • 字段:表中每列成爲一個字段,字段具備本身的屬性,如字段類型、字段大小等。其中,字段類型是字段最重要的屬性,它決定了字段可以存儲哪一種數據。
  • 索引:索引是一個單獨的、無力的數據庫結構。它是依賴於表創建的,在數據庫中索引是數據庫程序無需對整個表進行掃描,就能夠在其中找到所需的數據。
  • 視圖:視圖是從一張或多張表中導出的表(也稱虛擬表),是用戶查看數據表中數據的一種方式。表中包括幾個被定義的數據列與數據行,其結構和數據創建在對錶的查詢基礎上。
  • 存儲過程:存儲過程是一組爲了完成特定功能的SQL語句集合(包含查詢、插入、刪除和更新等操做),經編之後以名稱的形式儲存在SQL Server服務器端的數據庫中,由用戶經過制定存儲過程更的名字來執行。當這個存儲過程被調用執行時,這些操做也會被同時執行。

4.2 SQL Server的命名規範

4.2.1 標識符

  1. 標識符格式
  • 標識符的首字符必須是Unicode所定義字符,'_' '@' '#'。
    '@'開始的標識符表示局部變量或參數
    '#'開始的標識符表示臨時表或過程
    '##'開始的標識符表示全局臨時對象
  • 標識符後的後續字符
    Unicode 2.0 標準中所定義的字母。
    來自拉丁字母或其餘國家/地區腳本的十進制數字。
    '@' '$' '#' '_'
  • 標識符不容許是Transact-SQL的保留字
    微軟官方文檔
  • 不容許嵌入空格或其餘特殊字符
  1. 標識符分類
  • 常規標識符:符合標識符的格式規則
  • 分隔標識符:包含在「」[]內的標識符。該標識符能夠不符合標識符的格式規則。

4.2.2 對象命名規則

在一個數據庫中建立了一個數據庫對象後,數據庫對象的完整名稱應該由服務器名、數據庫名、擁有者名和對象名4部分組成
[[[server.][database].][owner_name].]object_name
服務器、數據庫和全部者的名稱即所謂的對象名稱限定符。當引用一個對象時,不須要指定服務器、數據庫和全部者,能夠利用句號標出他們的位置,從而省略限定符。
指定了全部4哥部分的對象名稱被稱爲徹底合法名稱。post

4.3.3 使用管理器刪除數據庫

刪除數據庫時必須知足如下條件

  • 若是數據庫設計日誌傳輸操做,在刪除數據庫以前必須取消日誌傳送操做
  • 若要刪除爲事務複製發佈的數據庫,或刪除爲合併複製發佈或訂閱的數據庫,必須首先從數據庫中刪除複製。若是數據庫已損壞,不能刪除複製,能夠先將數據庫設置爲脫機狀態,而後再刪除數據庫。
  • 若是數據庫中存在數據庫快照,必須首先刪除數據庫快照。
    系統數據庫(msdb、model、master、tempdb)沒法刪除,刪除數據庫後應當即備份master數據庫,由於刪除數據庫將更新master數據庫中的信息。

第5章 操做數據表與視圖

5.1 數據表基礎知識

5.1.1 基本數據類型

基本數據類型詳情
char、varchar、nchar、nvarchar的區別:

5.1.2 用戶定義數據類型

  1. 使用T-SQL語句建立用戶自定義數據類型

建立用戶自定義數據類型
語法:

sp_addtype [ @typename = ] type,   
    [ @phystype = ] system_data_type   
    [ , [ @nulltype = ] 'null_type' ] ;

實例:

USE test
EXEC sp_addtype postcode,'char(8)','not null'

刪除用戶自定義數據類型
語法:

sp_droptype [ @typename = ] 'type'

實例:

USE test
EXEC sp_droptype postcode

5.1.3 數據表的數據完整性

Microsost SQL Server 2008提供多種強制數據完整性的機制。

  1. NULL or NOT NULL
    表的每一列都有一組屬性,如名稱、數據類型、數據長度和爲空性等,列的全部屬性即構成列的定義。列能夠定義爲容許或不容許空值。
  • NULL:默認狀況下,列容許空值,即容許用戶在增長數據是省略該列的值。
  • NOT NULL:不容許在沒有指定列默認值的狀況下該列的值。
  1. 默認值
    若是在插入行時沒有指定列的值,那麼默認值將指定列中所使用的值。默認值可使任何取值爲常量的對象,如內置函數和數學表達式等。
  • 在CREATE TABLE中使用DEFAULT關鍵字建立默認定義,將常量表達式指派爲列的默認值,這是標準方法。
    - 使用CREATE DEFAULT語句建立默認對象,而後使用sp_bindefault系統存儲過程將它綁定到列上,這個一個向前兼容的功能。[此功能將在Microsoft SQL Server的將來版本中刪除]
  1. IDENTITY(特徵標識屬性)
    數據表中若是某列被指派IDENTITY,系統將自動爲表中插入的新行生成連續遞增的編號。由於標識值一般惟一,因此標識列一般定義爲主鍵。
    IDENTITY屬性適用於INT、SALLINT、TINYINT、DECIMAL(P,0)、UMERIC(P,0)數據類型的列。
  2. 約束
    約束是用來定義Microsoft SQL Server 2008自動強制數據庫完整性的方式。使用約束優先於使用觸發器、規則和默認值。SQL Server 2008中共有如下5種約束。
  • NOT NULL:使用戶必須在表的指定列中輸入一個值。每一個表中能夠有多個非空約束。
  • Check(檢查):用來指定一個布爾操做,限制輸入到表中的值。
  • Unique(惟一性):創建一列或多列的組合以惟一標識表中的每一行。逐漸能夠保證明體完整性,一個表只能有一個主鍵,同時逐漸中的列不能接受空值。
  • Foreign key(外鍵):用於創建和增強兩個表數據之間的連接的一列或多列。當一個表中做爲主鍵的一列被添加到另外一個表中時,連接就創建了,主要目的是控制存儲在外鍵表中的數據。

5.3 建立、刪除和修改約束

約束是SQL Server提供的自動強制數據完整性的一種方式,它是經過定義列的取值規則來維護數據的完整性,是強制完整性的標準機制。使用約束優先於使用觸發器、規則和默認值。查詢分析器也使用約束定義生成高性能的查詢執行計劃。

5.3.3 UNIQUE約束

當在表中已建立主鍵,但又要保證其餘數據列的值惟一時,可使用UNIQUE約束。
使用UNIQUE約束能夠確保在非主鍵列中部輸入重複的值。UNIQUE約束和PRIMARY KEY約束都具備強制惟一性,但想要強制一列或多列組合(不是PRIMARY KEY)的惟一性時,應使用UNIQUE約束而不是PRIMARY KEY約束。
能夠對一個表定義多個UNIQUE約束,但只能定義一個PRIMARY KEY約束。並且UNIQUE約束容許NULL。當與參與UNIQUE約束的任何值一塊兒使用時,每列只容許一個NULL。FOREIGN KEY約束能夠引用UNIQUE約束。
操做:

表->設計->索引/鍵->增長
列:選擇列
類型:惟一鍵

5.3.4 CHECK約束

CHECK約束經過限制輸入到列中的值來強制域的完整性。此類約束相似於FOREIGN KEy約束,能夠控制放入到列中的值。

  • FOREIGN KEY約束:從其餘表得到有效值列表
  • CHECK約束:經過不急於其餘列中的數據的邏輯表達式肯定有效值。
    建立CHECK約束能夠將某列數據的取值範圍限制在指定的範圍內,從而防止輸入的數據超出指定的範圍。
    操做
表->設計->CHECK約束->增長
表達式:old>18 and old<100

5.3.5 默認約束

默認約束使用戶可以定義一個值,每當用戶沒有在某一列中輸入值時,則將所定義的值提供給這一列。若是用戶對此列沒有特定的要求,可使用默認約束來爲此列輸入默認值。
即便列爲NOT NULL,設置默認約束後,可不進行輸入,會使用默認值。
操做

表->設計->選中列->列屬性
默認值或綁定:https://image.baidu.com/s/101.jpg

5.3.6 FK(外鍵)約束

FK適用於創建兩個表數據之間鏈接的一列或多列。經過將保存表中主鍵值的一列或多列增長到另外一個表中,可建立兩個表之間的連接,這個列就成爲第二個表的外鍵。
操做

表->設計->關係->增長
表和列規範:選擇主鍵表的列和外鍵表的列
INSERT和UPDATE規範
刪除規則
不執行任何操做:報錯不執行
級聯:刪除主鍵表列的同時將關聯的外鍵表中的列同時刪除
更新規則
級聯:更新主鍵表列的同時將關聯的外鍵表中的列同時更新

SQL的主鍵和外鍵的做用:
外鍵取值規則:空值或參照的主鍵值。

  • 插入非空值時,若是主鍵表中沒有這個值,則不能插入。
  • 更新時,不能改成主鍵表中沒有的值。
  • 刪除主鍵表記錄時,你能夠在建外鍵時選定外鍵記錄一塊兒級聯刪除仍是拒絕刪除。
  • 更新主鍵記錄時,一樣有級聯更新和拒絕執行的選擇。

5.4 關係的建立與維護

5.4.1 一對一關係

在一對一關係中,大部分相關信息都在一個表中。特色

  • 分割一個含有許多列的表
  • 出於安全考慮而隔離表的某一部分
  • 存儲能夠很容易刪除的臨時數據,只需刪除表便可刪除這些數據
  • 存儲值應用於主表子集的信息。
    若是連個相關列都是主鍵或具備惟一約束關係,建立的就是一對一關係。

5.4.2 一對多關係

一對多關係是最多見的關係類型,是指表A中的行能夠在表B中有許多匹配行,可是表B中的行只能在表A中有一個匹配行
若是在相關列中只有一列是主鍵或具備惟一約束,則建立的是一對多關係。

5.4.3 多對多關係

多對多關係是指關係中每一個表的行在相關表中具備多個匹配行。在數據庫中,多對多關係的創建是依靠第3哥表即鏈接表實現的,鏈接表包含相關的兩個表的主鍵列,而後從兩個相關表的主鍵列分別建立與連接表中匹配列的關係。

5.5 視圖概述

視圖是一種經常使用的數據庫對象,它將查詢的結果以虛擬表的形式存儲在數據中。視圖並不在數據庫中以存儲數據集的形式存在。視圖的結構和內容是創建在對錶的查詢基礎之上的,和表同樣包括行和列,這些行列數據都來源於其所引用的表,而且是在引用視圖過程當中動態生成的。
視圖中的內容是有查詢定義來的,而且視圖和查詢都是經過SQL語句定義的,他們有着許多相同和不一樣之處。

× 視圖 查詢
存儲 視圖存儲爲數據庫設計的一部分, 查詢不存儲
排序 只有當視圖包括TOP子句才能排序視圖 能夠排序任何查詢結果
加密 能夠加密視圖 不能加密查詢

能夠禁止全部用戶訪問數據庫的基表,而要求用戶只能經過視圖操做數據。這種方法能夠保護用戶和應用程序不受某些數據庫修改的影響

5.6 使用企業管理器管理視圖

標準視圖:保存在數據庫中的SELECT查詢語句,即一般意義上理解的視圖。 索引視圖:建立有索引的視圖成爲索引視圖。他通過計算並存儲有本身的數據,能夠提升某些類型查詢的性能,尤爲適用於聚合許多行的查詢,但不太適合於常常更新的基本數據集。 分區視圖:是在一臺或多臺服務器間水平聯結一組表中的分區數據,以使數據看上去來源於一個表。

相關文章
相關標籤/搜索