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


《SQL Server 從入門到精通》

第1章 數據庫基礎

1.2 數據庫的體系結構

1.2.1 數據庫三級模式結構

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

1.2.2 三級模式之間的映射

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

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

1.3 數據模型

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

1.3.1 數據模型的概念

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

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哥部分的對象名稱被稱為完全合法名稱。

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查詢語句,即通常意義上理解的視圖。
索引視圖:創建有索引的視圖成為索引視圖。他經過計算並存儲有自己的數據,可以提高某些類型查詢的性能,尤其適用於聚合許多行的查詢,但不太適合於經常更新的基本數據集。
分區視圖:是在一台或多台服務器間水平聯結一組表中的分區數據,以使數據看上去來源於一個表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM