軟考筆記9——數據庫技術基礎

第九章節——數據庫技術基礎

數據庫技術基礎

  • 第九章節——數據庫技術基礎
  • 一、基本概念
    • 1. 數據庫與數據庫系統
    • 2. 數據庫的三級模式
      • 2.1 內模式
      • 2.2 概念模式
      • 2.3 外模式
      • 2.4 數據庫的兩級映射
      • 2.5 數據庫設計的基本步驟
  • 二、數據模型
    • 1. 基本概念
    • 2. E-R模型
      • 2.1 實體
      • 2.2 聯系
      • 2.3 屬性
    • 3. 實體-聯系方法
    • 4. 關系模型
  • 三、關系代數
    • 1. 關系數據庫的基本概念
      • 1.1 屬性和域
      • 1.2 笛卡爾積與關系
      • 1.3 關系的相關名詞
      • 1.4 關系的三種類型
      • 1.5 關系數據庫模式
      • 1.6 完整性約束
      • 1.7 關系運算
    • 2. 五種基本的關系代數運算
      • 2.1 并(Union)
      • 2.2 差(Difference)
      • 2.3 廣義笛卡爾積(Extended Cartesian Product)
      • 2.4 投影(Projection)
      • 2.5 選擇(Selection)
    • 3. 擴展的關系代數運算
      • 3.1 交(Intersection)
      • 3.2 連接(Join)
      • 3.3 除(Division)
      • 3.4 廣義投影(Generalized Projection)
      • 3.5 外連接(Outer Join)
  • 四、關系型數據庫SQL語言簡介
    • 1. SQL簡介
    • 2. SQL數據定義
      • 2.1 創建表(Create Table)
      • 2.2 修改(Alter Table)
      • 2.3 刪除(Drop Table)
      • 2.4 索引
      • 2.5 視圖
    • 3. SQL數據查詢
      • 3.1 Select基本結構
      • 3.2 連接查詢
      • 3.4 子查詢與聚集查詢
      • 3.5 分組查詢
      • 3.6 更名運算
      • 3.7 字符串操作
      • 3.8 視圖查詢
    • 4. 數據更新
      • 4.1 插入
      • 4.2 刪除
      • 4.3 修改
    • 5. 訪問控制
      • 5.1 授權
      • 5.2 收回授權
  • 五、關系數據庫的規范化
    • 1. 函數依賴
      • 1.1 函數依賴
      • 1.2 部分函數依賴
      • 1.3 傳遞函數依賴
      • 1.4 函數依賴的公理系統(Armstrong公理系統)
    • 2. 規范化
      • 2.1 1NF(第一范式)
      • 2.2 2NF(第二范式)
      • 2.3 3NF(第三范式)
      • 2.4 BCNF(巴克斯范式)
      • 2.5 4NF(第四范式)
    • 3. 模式分解及分解特征
      • 3.1 分解
      • 3.2 無損鏈接
      • 3.3 保持函數依賴
  • 六、數據庫的控制功能
    • 1. 事務管理
    • 2. 數據庫的備份與恢復
      • 2.1 數據庫故障類型
      • 2.2 數據庫的備份方法
    • 3. 并發控制
      • 3.1 丟失修改(丟失更新)
      • 3.2 不可重復讀
      • 3.3 讀臟數據
      • 3.4 并發控制技術

一、基本概念

1. 數據庫與數據庫系統

  • 數據庫系統(DataBase System,DBS)由數據庫、硬件、軟件和人員組成。
  • 數據庫管理系統(DataBase Management System,DBMS)主要實現對共享數據有效地組織、管理和存取。
  • DBMS的功能:數據定義(Data Definition Language,DDL)、數據庫操縱(Data Manipulation
    Language,DML)、數據庫運行管理、數據的組織、存儲和管理、數據庫的建立和維護、網絡通信等。
  • DBMS的分類:關系數據庫系統(Relation DataBase System,RDBS)、面向對象的數據庫系統
    (0bject-Oriented DataBase System,OODBS)、對象關系數據庫系統(Object-Oriented RelationDataBase Svstem,ORDBS)

2. 數據庫的三級模式

2.1 內模式

也稱存儲模式,是數據物理結構存儲方式的描述,是數據在數據庫內部的表示方式,定義所有的內部記錄類型、索引和文件的組織方式以及數據控制方面的細節。一個數據庫只有一個內模式。對應數據庫中的物理存儲文件

2.2 概念模式

也稱模式,是數據庫中全部數據的邏輯結構和特征的描述。一個數據庫只有一個概念模式。對應數據庫中的基本表

2.3 外模式

也稱用戶模式或子模式,是用戶與數據庫系統的接口,是用戶用到的那部分數據的描述。一個數據庫可以有多個外模式。對應數據庫中的視圖

2.4 數據庫的兩級映射

(1) 模式/內模式映像:實現了概念模式和內模式間的相互轉換,是表和數據的物理存儲之間的映射,保證了數據的物理獨立性。
(2) 外模式/模式映像:實現了外模式和概念模式間的相互轉換,是視圖和表之間的映射,保證數據的邏輯獨立性

數據的獨立性:
(1)物理獨立性。物理獨立性是指用戶的應用程序與存儲在磁盤上的數據庫中的數據是相互獨立的。當數據的物理存儲改變時,應用程序不需要改變。物理獨立性存在于概念模式和內模式之間的映射轉換,說明物理組織發生變化時應用程序的獨立程度。
(2)邏輯獨立性。邏輯獨立性是指用戶的應用程序與數據庫中的邏輯結構是相互獨立的。當數據的邏輯結構改變時,應用程序不需要改變。邏輯獨立性存在于外模式和概念模式之間的映射轉換,說明概念模式發生變化時應用程序的獨立程度。

在這里插入圖片描述

2.5 數據庫設計的基本步驟

(1) 用戶需求分析。即分析數據存儲的要求,產出物有數據流圖、數據字典、需求說明書。獲得用戶對系統的三個要求:信息要求、處理要求、系統要求。
(2) 概念結構設計。就是設計E-R圖,也即實體-聯系圖。工作步驟包括:選擇局部應用、逐一設計分E-R圖、E-R圖合并。分E-R圖進行合并時,它們之間存在的沖突主要有以下3類。

  • 屬性沖突。同一屬性可能會存在于不同的分E-R圖中。
  • 命名沖突。相同意義的屬性,在不同的分E-R圖上有著不同的命名,或是名稱相同的屬性在不同的分E-R圖中代表著不同的意義。
  • 結構沖突。同一實體在不同的分E-R圖中有不同的屬性,同一對象在某一分E-R圖中被抽象為實體而在另分E-R圖中又被抽象為屬性。
    (3) 邏輯結構設計。將E-R圖,轉換成關系模式。工作步驟包括:確定數據模型、將E-R圖轉換成為指定的數據模型、確定完整性約束和確定用戶視圖。
    (4) 物理結構設計。是邏輯模型在計算機中的具體實現方案。步驟包括確定數據分布、存儲結構和訪問方式。
    (5) 數據庫實施階段。根據邏輯設計和物理設計階段的結果建立數據庫,編制與調試應用程序,組織數據入庫,并進行試運行。
    (6) 數據庫運行和維護階段。數據庫應用系統經過試運行即可投入運行,但該階段需要不斷地對系統進行

在這里插入圖片描述

二、數據模型

1. 基本概念

數據模型是對現實世界數據特征的抽象。最常用的數據模型分為概念數據模型和基本數據模型

(1) 概念數據模型:也稱信息模型,是按用戶的觀點對數據和信息建模,是用戶和數據庫設計人員交流的語言,主要用于數據庫設計。這類模型中最著名的是實體-聯系模型,簡稱E-R模型
(2) 基本數據模型:它是按計算機系統的觀點對數據建模,是現實世界數據特征的抽象,用于DBMS的實現。

2. E-R模型

E-R模型,就是實體-聯系模型,用來描述現實世界的概念模型(接近于人的思維方式,容易理解),其中有三個主要的概念:實體、聯系和屬性。

2.1 實體

矩形表示,每個實體由一組屬性表示,包括候選鍵、主鍵、外鍵。實體集是指具有相同屬性的實體集合。
候選鍵能唯一地標識一行元組的屬性集。
主鍵:從候選鍵中選一個作為主鍵。
外鍵:在另一個關系模式中充當主鍵的屬性。

2.2 聯系

菱形表示,實體集之間的對應關系稱為聯系,分為一對一(1:1)、一對多(1:n或1:*)、多對多(m: n或*:*)。
一對一聯系(1:1)。實體集A中的一個實體最多只與實體集B中的一個實體相聯系,反之亦然。
一對多聯系(1:n或1:*)。實體集A中的一個實體可與實體集B中的多個實體相聯系。
多對多聯系(m:n或*.*)。實體集A中的多個實體可與實體集B中的多個實體相聯系。多對多的聯系會產生一個新的關系模式,此關系模式的屬性由聯系的兩個實體的主鍵以及自己的特有屬性所組成。

樣例:
1:1:一個學校只有一名校長,而每位校長只在一個學校工作。
1:n或1:*:一個學校有很多學生,而每個學生只在一個學校上課。
m:n或*:*:一名學生可以選修多門課程,而一門課程也可以由多名學生講授

2.3 屬性

橢圓表示,是實體某方面的特性。E-R模型中的屬性分為:

簡單和復合屬性: 簡單屬性是原子的、不可再分的,復合屬性可以劃分為多個子屬性,如通信地址。
單值和多值屬性: 對于一個特定的實體都只有一個單獨的值(單值屬性)。例如,對于一個特定的員工,只對應一個員工號、員工姓名。而員工可能有0個、1個或多個親屬,那么員工的親屬姓名可能有多個,這樣的屬性稱為多值屬性。
NULL屬性: 某個屬性沒有值或屬性值未知時,使用NULL值,表示無意義或不知道。
派生屬性: 派生屬性可以從其他屬性得來。例如,職工實體集中有“參加工作時間”和“工作年限”"屬性,那么“工作年限”的值可以由當前時間和參加工作時間得到。“工作年限”就是一個派生屬性。
弱實體集: 一個實體的存在必須以另一個實體為前提,這類實體稱為弱實體集。例如:職工的家屬必須以職工在職為前提,依賴于職工。

3. 實體-聯系方法

在這里插入圖片描述
在這里插入圖片描述

4. 關系模型

在數據庫領域中常見的數據模型有層次模型、網狀模型、關系模型和面向對象模型。關系模型是目前最常用的數據模型之一。在關系模型中用表格結構表達實體集以及實體集之間的聯系。

三、關系代數

1. 關系數據庫的基本概念

1.1 屬性和域

一個現實中的實體(事物)常用若干特征來描述,這些特征稱為屬性每個屬性的取值范圍對應的集合稱為該屬性的
例如:員工(員工號,姓名,性別,參加工作時間,部門號)

1.2 笛卡爾積與關系

設D1,D2,…, Di…,Dn為任意集合,其笛卡爾積為:
D1× D2×…× Di×…× Dn = {(d1, d2,…, di,…, dn) l di ∈ Di, i = 1,2,3,…,n}
其中,每一個元素(d1,d2,…, di,…, dn)稱為一個n元組。

1.3 關系的相關名詞

(1)候選碼(Candidate Key):若關系中的某一屬性或屬性組的值能唯一地標識一個元組,則稱該屬性或屬性組為候選碼。
(2)主碼(Primary Key):若一個關系有多個候選碼,則選定其中一個為主碼。
(3)主屬性(Non-Kcy attribute):包含在任何候選碼中的諸屬性稱為主屬性。不包含在任何候選碼中的屬性稱為非碼屬性。
(4)外碼(Foreign Key):如果關系模式R中的屬性或屬性組不是該關系的主碼,但它是其他關系的主碼,那么該屬性或屬性組是關系模式R的外碼。
員工 (員工號,姓名,性別,參加工作時間,部門號),部門(部門號,名稱,電話,負責人)

1.4 關系的三種類型

(1)基本關系 。通常又稱為基本表,它是實際存在的表,是實際存儲數據的邏輯表示。
(2)查詢表 。查詢表是查詢結果對應的表。
(3)視圖表視圖表是由基本表或其他視圖表導出的表。由于它本身不獨立存儲在數據庫中,數據庫中只存放它的定義,所以常稱為虛

1.5 關系數據庫模式

關系的描述稱為關系模式(Relation Schema),可以形式化地表示為: R(U , D,dom,F)
其中,R表示關系名;U是組成該關系的屬性名集合;D是屬性的域;dom是屬性向域的映像集合;F為屬性間數據的依賴關系集合。

通常將關系模式簡記為: R(U)或R(A~1~,A~2~,…,A~n~)

其中,R為關系名,A1,Ap,.…An為屬性名或域名,屬性向域的映像常常直接說明屬性的類型、長度。通常在關系模式主屬性上加下劃線表示該屬性為主碼屬性
員工(員工號,姓名,性別,參加工作時間,部門號)

1.6 完整性約束

完整性規則提供了一種手段來保證當用戶對數據庫做修改時不會破壞數據的一致性。防止對數據的意外破壞。關系模型的完整性規則是對關系的某種約束條件。關系的完整性分為三類:
實體完整性: 關系的主屬性不能取空。
參照完整性: 外鍵的值或者為空,或者必須等于對應關系中的主鍵值。
員工(員工號,姓名,性別,參加工作時間,部門號),部門(部門號,名稱,電話,負責人)
用戶定義完整性: 根據語義要求所自定義的約束條件。

1.7 關系運算

關系操作的特點是操作對象和操作結果都是集合。關系代數運算符有4類:集合運算符、專門的關系運算符、算術比較符和邏輯運算符。
在這里插入圖片描述

2. 五種基本的關系代數運算

2.1 并(Union)

關系模式在代數運算時可以理解為數據庫表的運算

關系R與S的屬性及屬性的個數相同。并的結果為屬于R或屬于S的元組構成的集合(元組要去重)。

R ∪ \cup S = {t | t ∈ \in R ∪ \cup t ∈ \in s}
在這里插入圖片描述

2.2 差(Difference)

關系R與S的屬性及屬性的個數相同。R一S差的結果為屬于R但不屬于S的元組構成的集合。
在這里插入圖片描述

2.3 廣義笛卡爾積(Extended Cartesian Product)

如果關系模式R中有n個屬性,關系模式S中有m個屬性,則廣義笛卡爾積的結果中有 (n+m)個屬性,其中前n個屬性來自R,后m個屬性來白S。如果R中有K1個元組,S中有K2個元組,則運算結果有K1×K2個元組。
在這里插入圖片描述

2.4 投影(Projection)

從關系的垂直方向進行運算。在關系R中挑選若干屬性列A組成新的關系。

2.5 選擇(Selection)

從關系的水平方向進行運算,從關系R中選擇滿足條件的元組。
在這里插入圖片描述
其中,F中運算對象是屬性名(或列的序號)或者常量(用單引號括起來,如'1'表示數字1)、算術運算符(<、 ≤、>、≥、≠)、邏輯運算符( ∧ 、 ∨ 、 ? \wedge、 \vee、\lnot ?)。

3. 擴展的關系代數運算

3.1 交(Intersection)

關系R與S的屬性及屬性的個數相同。關系R與S的交是由屬于R同時又屬于S的元組構成的集合。
在這里插入圖片描述
顯然,R ∩ \cap S = R -(R - S),或者R ∩ \cap S =S- (S - R)。

3.2 連接(Join)

連接分為$\theta$連接、等值連接和自然連接3種。連接運算是從兩個關系R和S的笛卡爾積中選取滿足條件的元組。

  1. $\theta$連接:從關系R與S的笛卡爾積中選取屬性間滿足一定條件的元組
    在這里插入圖片描述

  2. 等值連接:當 θ \theta θ為"="時,稱之為等值連接。
    在這里插入圖片描述

  3. 自然連接:是一種特殊的等值連接,它要求兩個關系中進行比較的分量必須是相同的屬性組,相同屬性組的值要相等,并且在結果集中將重復屬性列去掉
    在這里插入圖片描述

3.3 除(Division)

除運算是同時從關系的水平方向和垂直方向進行運算。
在這里插入圖片描述

3.4 廣義投影(Generalized Projection)

允許在投影列表中使用算術運算,是對投影運算的補充。
在這里插入圖片描述

3.5 外連接(Outer Join)

在自然連接中關系R與S的一些元組因為沒有公共屬性會被拋棄。使用外連接就可以避免這樣的丟失。外連接運算就是將自然連接時舍棄的元組也放入新關系,并在新增加的屬性上填入空值。

  • 左外連接(Left Outer Join): 記為R ? \rtimes ?S,以左側的關系R為主,保留左側的關系R的所有元組右側的關系S未等值的用NULL填充,加入到RvS中。
  • 右外連接(Right Outer Join): 記為R ? \ltimes ?S,以右側的關系S為主,保留右側的關系S的所有元組,左側的關系R未等值的用NULL填充,加入到RS中。
  • 全外連接(Full Outer Join): 記為R?S,左外連接和右外連接的并。

四、關系型數據庫SQL語言簡介

這里我只列舉一些軟考用的到的,我之前寫了一篇更加詳細的關于Mysql的sql語言:MySQL數據庫總結

1. SQL簡介

SQL是結構化查詢語言的簡稱,是關系數據庫中最普遍使用的語言,包括數據查詢、數據操縱、數據定義和數據控制,是一種通用的、功能強大的關系數據庫標準語言。
SQL語言支持關系數據庫的三級模式。基本表和視圖都是表,基本表是存儲在數據庫中的表,而視圖是虛表,是從基本表或其他視圖導出的表。數據庫中只存放視圖的定義,不存放視圖的數據。.用戶可用SOL語言對視圖或表進行查詢等操作。

關系數據庫的三級模式:
在這里插入圖片描述

2. SQL數據定義

SQL的數據定義包括對表、視圖、索引的創建和刪除,屬于數據庫定義語言(DDL)。

2.1 創建表(Create Table)

語句格式: CREATE TABLE <表名>(<列名><數據類型>[列級完整性約束條件] [,<列名><數據類型[列級完整性約束條件]…[,<表級完整性約束條件>);

完整性約束樣例列級/表級
非空約束Not null列級
唯一約束Unique列級
主鍵約束Primary Key列級/表級
外鍵約束Foreign表級

2.2 修改(Alter Table)

語句格式: ALTER TABLE<表名>[ADD<新列名><數據類型>[完整性約束條件]][DROP<完整性約束名>][MODIFY<列名><數據類型];

2.3 刪除(Drop Table)

語句格式: Drop Table <表名>;

2.4 索引

數據庫中索引的作用:①通過創建唯一性索引,保證數據記錄的唯一性;② 大大加快數據的檢索速度; ③加速表與表之間的連接;④在使用Order By和Group By子句中進行檢索數據時,可以顯著減少查詢中分組和排序的時間;⑤使用索引可以在檢索數據的過程中使用優化隱藏器,提高系統性能。
索引分為聚簇索引和非聚簇索引。聚簇索引是指索引表中索引項的順序與表中記錄的物理順序一致的索引。

  • 創建索引
    語句格式: CREATE [UNIQUE][CLUSTER] INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);

  • 刪除索引
    語句格式: DROP INDEX<索引名>;

2.5 視圖

視圖是由一個或多個基本表或視圖導出的表,其結構和數據是建立在對表的查詢基礎上的,是一張虛擬的表。

  • 視圖的創建
    語句格式: CREATE VIEW視圖名(列表名) AS SELECT查詢子句 [WITH CHECK OPTION];

注意: 在視圖的創建中必須遵循以下規定。

  • 子查詢可以是任意復雜的SELECT語句,但通常不允許含有ORDER BY子句和DISTINCT短語。
  • WITH CHECK OPTION表示對UPDATE、INSERT、DELETE操作時保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)。
  • 組成視圖的屬性列名或者全部省略或者全部指定。如果省略屬性列名,則隱含該視圖由SELECT子查詢目標列的主屬性組成。

3. SQL數據查詢

SQL的數據操縱功能包括Insert(插入)、Delete(刪除)、Update(修改)、Select(查詢),屬于數據庫操縱語言(DML)。

3.1 Select基本結構

語句格式: SELECT [ALL/DISTINCT]<目標列表達式[<目標列表達式>]…
FROM<表名或視圖名>[,<表名或視圖名>][WHERE<條件表達式>]
[GROUP BY<列名1>[HAVING<條件表達式>]][ORDER BY<列名2>[ASC|DESC]…]
其中Having只能與Group By搭配使用。

Where子句的條件表達式中可使用的運算符

類別運算符
集合運算符In(在集合中)、Not ln(不在集合中)
字符串匹配運算符Like (與_和%進行單個或多個字符匹配)
空值比較運算符Is Null(為空)、Is Not Null(不為空)
算術運算符>、>=、<、<=、=、
邏輯運算符And(與)、Or(或)、Not(非)

3.2 連接查詢

連接查詢涉及兩個及以上表的查詢。連接運算有=、>、<、>=、<=、!=等。

3.4 子查詢與聚集查詢

子查詢: 子查詢也稱嵌套查詢,是指一個SELECT-FROM-WHERE查詢塊可以嵌入另一個查詢塊之中。

聚集函數

聚集函數名功能
Count([DistinctAll]*)
Count([DistinctAll]<列名>)
Sum([DistinctAll]<列名>)
Avg([Distinct[All]<列名>)
Max([Distinct/All]<列名>)求一列值的最大值
Min([DistinctAll]<列名>)

3.5 分組查詢

Group By <列名> [Having <條件表達式>]將查詢結果按某一列或多列進行分組。

3.6 更名運算

SQL提供了可為關系和屬性重新命名的機制,使用“As”實現。

3.7 字符串操作

對于字符串進行的最常用的操作是模式匹配LlKE。使用兩個特殊的字符來描述模式:_“%"匹配任意字符串;“_”匹配任意一個字符。模式匹配是大小寫敏感的。

3.8 視圖查詢

系統執行該語句時,通常先將其轉換成等價的對基本表的查詢,然后執行查詢語句。
示例:Select Sno,Sname,Sage From CS_Student_View Where Sage <20;

4. 數據更新

4.1 插入

語句格式: INSERT INTO基本表名(字段名[,字段名]…) VALUES(常量[,常量]…);

4.2 刪除

語句格式:DELETE FROM基本表名[WHERE條件表達式];

4.3 修改

語句格式:UPDATE基本表名SET 列名=值表達式(,列名=值表達式…)[WHERE條件表達式];

5. 訪問控制

SQL標準包括Insert、Delete、Update和lSelect權限。Select權限對應于Read權限。

5.1 授權

語句格式: GRANT<權限>[,<權限>]…[ON<對象類型<對象名] TO <用戶>[<用戶>]… [WITH GRANT OPTION];

對象對象類型操作權限
屬性列TableInsert、Delete、Updatc、Sclect、All Privileges(4種權限的總和)
視圖TableInscrt、Deletc、Update、Select、All Privileges(4種權限的總和)
基本表TableInsert、Delete、Update、Select、Alter、Index、All Privileges (6種權限的總和)
數據庫DataBaseCreateTab建立表的權限,可由DBA授予普通用戶

5.2 收回授權

語句格式:REVOKE<權限>[,<權限>]…[ON<對象類型><對象名>] FROM<用戶>[<用戶>]…;

五、關系數據庫的規范化

1. 函數依賴

關系數據庫設計的方法之一就是設計滿足合適范式的模式。關系數據庫規范化理論主要包括數據依賴、范式和模式設計方法。其中核心基礎是數據依賴,數據依賴中最重要、最基本的就是函數依賴。

1.1 函數依賴

設R(U)是屬性集U上的關系模式,X、Y是U的子集。若對R(U)的任何一個可能的關系r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數決定Y或Y函數依賴于X,記作X→Y

1.2 部分函數依賴

如果X→Y,但Y不完全函數依賴于X,則稱Y對X部分函數依賴。
例子:(A,B)能確定C,A也能確定C,即(A,B)屬性集中的部分屬性(A)就可以確定C,則C部分函數依賴于(A,B)。

1.3 傳遞函數依賴

在R(U,F)中,如果X →Y,Y ? \subsetneq ? X,Y→Z,則稱Z對X傳遞依賴。其中,U:屬性集,F:是U上的一組函數依賴。
例子:若A→B,B→C,則A→C (B不能→A,防止直接A→C),則稱C傳遞函數依賴A。
在這里插入圖片描述
函數依賴求候選鍵:從一個或一組屬性出發,通過函數依賴集中的依賴關系,能決定關系模式中的其他所有屬性,則這個屬性或屬性組為候選鍵。

  • 求候選鍵最穩靠的辦法是圖示法。圖示法求候選鍵的過程如下:
    (1)將關系的函數依賴關系用“有向圖”的方式表示。
    (2)找出入度為0的屬性,并以該屬性集合為起點,嘗試遍歷有向圖,若能正常遍歷圖中所有結點,則該屬性集即為關系模式的候選鍵。
    (3)若入度為O的屬性集不能遍歷圖中所有結點,則需要嘗試性的將一些中間結點(既有入度,也有出度的結點)并入度為0的屬性集中,直至該屬性集合能遍歷所有結點,則該屬性集合為候選鍵

  • 函數依賴求候選鍵第二種方法:根據依賴集,找出從未在右邊出現過的屬性,必然是候選鍵之一,以該屬性為基礎,根據依賴集依次擴展,看能否遍歷所有屬性,若無法遍歷所有屬性,將無法遍歷的屬性加入候選鍵中。

1.4 函數依賴的公理系統(Armstrong公理系統)

設關系模式R(U,F),其中U為屬性集,F是U上的一組函數依賴,那么有以下推理規則。

  • A1自反律: 若Y ? \subseteq ?X ? \subseteq ?U,則X→Y為F所蘊涵。
  • A2增廣律:若X→Y為F所蘊涵,且Z ? \subseteq ?U,則XZ→ YZ為F所蘊涵。
  • A3傳遞律:若X→Y, Y →Z為F所蘊涵,則X →Z為F所蘊涵。

根據以上三條推理規則,又可推出以下三條推理規則:

  • 合并規則:若X→Y,X →z,則X→YZ為F所蘊含。
  • 偽傳遞規則:若X →Y,wY →Z,則XW→Z為F所蘊含。
  • 分解規則:若X →Y,Z ? \subseteq ? Y,則X→Z為F所蘊含。

2. 規范化

關系數據庫設計的方法之一就是設計滿足適當范式的模式,通常可以通過判斷分解后的模式達到幾范式來評價模式規范化的程度。范式有: 5 N F ? 4 N F ? B C N F ? 3 N F ? 2 N F ? 1 N F 5NF \subset 4NF\subset BCNF \subset 3NF \subset 2NF \subset 1NF 5NF?4NF?BCNF?3NF?2NF?1NF其中級別越高,模式規范化程度也就越高。

2.1 1NF(第一范式)

定義:若關系模式R的每一個分量是不可再分的數據項,則關系模式R屬于第一范式。即屬性是原子不可再分的

1NF存在的問題:數據冗余、插入異常、刪除異常等問題。

2.2 2NF(第二范式)

定義:若關系模式R ∈ \in 1NF,且每一個非主屬性完全(函數)依賴于碼,則關系模式R∈ 2NF。即每個非主屬性都由整個碼決定。當1NF消除了非主屬性對碼的部分函數依賴,則稱為2NF。

2.3 3NF(第三范式)

定義:若關系模式R(U,F)中不存在這樣的碼X,屬性組Y及非主屬性Z(Z ? \subsetneq ?Y)使得X→Y(Y ? \nrightarrow ?X),Y→Z成立,則關系模式R ∈ 3NF。即當2NF消除了非主屬性對碼的傳遞函數依賴,則稱為3NF。

2.4 BCNF(巴克斯范式)

BCNF是修正的第三范式。規定了每個屬性(包括主屬性)都不傳遞依賴于碼。即當3NF消除了主屬性對碼的部分函數依賴和傳遞函數依賴,則稱為BCNF。

2.5 4NF(第四范式)

4NF主要是消除了多值依賴。

3. 模式分解及分解特征

3.1 分解

模式分解:將一個關系模式分解為多個子模式。
模式分解就是模式規范化的工具,模式分解使用無損連接保持函數依賴來衡量模式分解后是否導致原有模式中部分信息丟失。

3.2 無損鏈接

判定定理:關系模式R(U,F)的一個分解 ρ \rho ρ={R1(U1,F1),R2(U2,F2).…, Rk(Uk ,Fk)}具有無損連接的充分必要條件是U1 ∩ \cap U2→ U1 - U2 ∈ F+ 或 U1 ∩ \cap U2→U2 - U1∈ F+
F是模式分解后子模式函數依賴集的并集。

3.3 保持函數依賴

定義:關系模式R(U,F)的一個分解 ρ \rho ρ={R1(U1,F1),R2(U2,F2).…, Rk(Uk ,Fk)},如果F+ =(Uki=1 π \pi πRi(F+)),則稱分解 ρ \rho ρ保持函數依賴。(分解后的子模式函數依賴集的并集是否保持了原來的函數依賴集即F+= F )

保持函數依賴,就是模式分解后的F+(各個子模式函數依賴集的并集)是否與F(原有的函數依賴集)等價。F+包含所有F中的函數依賴,則可以得出保持函數的依賴性(充分條件)。如果F+不顯式包含F中的函數依賴,還需進一步判斷,判斷方法有兩條:

  • 第一種是通過F+中的屬性閉包去求,是否蘊含函數依賴(這種方法要求做函數投影時,不能缺項);
  • 第二種使用給定的算法去求,對投影要求簡單,但過程特別麻煩。

六、數據庫的控制功能

1. 事務管理

事務是DBMS的基本工作單位,是由用戶定義的一個操作序列。
事務的定義語句有:Begin Transaction(事務開始)、Commit(事務提交,表示事務成功地結束)、Rollback
(事務回滾,表示事務非成功地結束〉。
事務的ACID性質:
(1)原子性(Atomicity) :要么都做,要么都不做。
(2)一致性(Consistcncy):事務執行的結果必須從一個一致性狀態轉到另一個一致性狀態。中間狀態對外不可見。
(3)隔離性(Isolation) :事務之間相互隔離,互不干擾。
(4)持久性(Durability):事務成功提交后,對數據庫的更新操作是永久有效的。

2. 數據庫的備份與恢復

2.1 數據庫故障類型

事務內部故障: 如運算溢出、除零錯誤、并發事務發生死鎖等
系統故障: 也稱為軟故障,是指造成系統停運的事件,如CPU故障、OS故障、突然停電等
介質故障: 也稱為硬故障,如磁盤損壞等
計算機病毒

2.2 數據庫的備份方法

數據庫的轉儲分為靜態轉儲和動態轉儲,海量轉儲、增量轉儲和差量轉儲,以及日志文件。

  • 靜態轉儲:冷備份,指在轉儲期間不允許對數據庫進行任何存取、修改操作。
    優點是非常快速、容易歸檔(直接物理復制操作)。
    缺點是只能提供到某一時間點上的恢復,不能做其他工作,不能按表或按用戶恢復。

  • 動態轉儲:熱備份,在轉儲期間允許對數據庫進行存取、修改操作,因此,轉儲和用戶事務可以并發執行。
    優點是可在表空間或數據庫文件級備份,數據庫仍可使用,可達到秒級恢復。缺點是不能出錯,否則后果嚴重,若熱備份不成功,所得結果幾乎全部無效。

  • 海量轉儲(完全轉儲): 是指每次轉儲全部數據庫。

  • 增量轉儲: 是指每次只轉儲上次轉儲后更新過的數據,用于數據庫很大,事務處理頻繁的場景。·差量轉儲:是對最近一次數據庫完全備份以來發生的數據變化進行備份,優點是速度快,占用較小的時間和空間。

  • 日志文件: 在事務處理過程中,DBMS把事務開始、事務結束以及對數據庫的插入、刪除和修改的每一次操作寫入日志文件。一旦發生故障,DBMS的恢復子系統利用日志文件撤銷事務對數據庫的改變,回退到事務的初始狀態。

3. 并發控制

并發操作就是在多用戶系統中,可能出現多個事務同時操作同一數據的情況。并發操作會導致3種數據不一致的問題:

3.1 丟失修改(丟失更新)

把兩個事務T1和T2讀入同一數據做修改,并發執行時,T1把T2,或T2把T1,的修改結果覆蓋掉,造成了數據的丟失更新問題,導致數據不一致。
在這里插入圖片描述

3.2 不可重復讀

事務T1讀取了數據R,事務T2讀取并更新了數據R。當事務T1再讀取數據R以進行核對時,得到的兩次讀取數據不一致。
在這里插入圖片描述

3.3 讀臟數據

事務T1更新了數據R,事務T2讀取了更新后的數據R,事務T1由于某種原因被撤銷,進行了事務回滾,數據R恢復原值,事務T2讀取了臟數據。

在這里插入圖片描述

造成以上3種數據不一致的主要原因是事務的并發操作破壞了事務的隔離性

3.4 并發控制技術

并發控制的主要技術是封鎖(Lock)技術

基本鎖類型特點
排他鎖(X鎖)事務T對數據A加X鎖:
(1)只允許務T讀取、修改數據A;
(2)只有等該鎖解除之后,其他事務才能夠對數據A加任何鎖類型。解決了X鎖太嚴格,不允許其他事務并發讀的問題。
共享鎖(S鎖)事務T對數據A加S鎖,則:
(1)只允許事務T讀取數據A但不能夠修收;
(2)可允許其他事務對其加S鎖,但不允許加X鎖。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77139.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django分頁教程及示例

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 完整代碼示例:結論Django的分頁模塊允許你將大量數據分割成更小的塊(頁面)。這對于以可管理的方式顯示項目列表,如博客文章或產品…

int 與 Integer 的區別詳解

1. 本質區別 特性intInteger類型基本數據類型&#xff08;Primitive&#xff09;包裝類&#xff08;Wrapper Class&#xff09;存儲位置棧&#xff08;或作為對象成員在堆中&#xff09;堆&#xff08;對象實例&#xff09;默認值0null&#xff08;可能導致 NullPointerExcept…

mariadb使用docker compose方式安裝

問題 本地mac m1上面的mysql和mariadb突然不用使用了&#xff0c;重新安裝也不想&#xff0c;最近mac系統也更新了&#xff0c;brew也更新了&#xff0c;重新安裝mariadb還是不能正常使用&#xff0c;現在我打算使用docker來安裝本地的mariadb了。 默認配置文件my.cnf 從容器…

基于React + Antd + Java的OFD文件上傳預覽實現方案(OFD文件轉圖片)

一、前端實現方案(React + Antd) import React, {useState } from react; import {Upload, Button, Image, Carousel } from antd; import {UploadOutlined } from @ant-design/icons;const OFDUploadPreview = () => {const [previewImages, setPreviewImages] = useSta…

從零構建大語言模型全棧開發指南:第四部分:工程實踐與部署-4.3.1LangChain與Dify平臺實戰:從RAG到Agent工作流

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 LangChain與Dify平臺實戰:從RAG到Agent工作流 - 4.3.1 LangChain與Dify平臺實戰:從RAG到Agent工作流1. LangChain核心組件與RAG架構設計1.1 LangChain核心模塊1.2 RAG架構實現流程2. RAG實戰:企業知識…

操作 Office Excel 文檔類庫Excelize

Excelize 是 Go 語言編寫的一個用來操作 Office Excel 文檔類庫&#xff0c;基于 ECMA-376 OOXML 技術標準。可以使用它來讀取、寫入 XLSX 文件&#xff0c;相比較其他的開源類庫&#xff0c;Excelize 支持操作帶有數據透視表、切片器、圖表與圖片的 Excel 并支持向 Excel 中插…

R Excel 文件:高效數據處理與可視化工具的完美結合

R Excel 文件&#xff1a;高效數據處理與可視化工具的完美結合 引言 在數據分析和處理領域&#xff0c;R語言因其強大的數據處理能力和豐富的可視化功能而備受青睞。而Excel作為最常用的電子表格軟件&#xff0c;其廣泛的應用也使得R與Excel的結合成為數據處理與可視化的理想…

[ctfshow web入門] 零基礎版題解 目錄(持續更新中)

ctfshow web入門 零基礎版 前言 我在刷題之前沒有學過php&#xff0c;但是會python和C&#xff0c;也就是說&#xff0c;如果你和我一樣會一門高級語言&#xff0c;就可以開始刷題了。我會以完全沒學過php的視角來寫題解&#xff0c;你也完全沒有必要專門學習php&#xff0c;這…

linux第三次作業

1、將你的虛擬機的網卡模式設置為nat模式&#xff0c;給虛擬機網卡配置三個主機位分別為100、200、168的ip地址 2、測試你的虛擬機是否能夠ping通網關和dns&#xff0c;如果不能請修改網關和dns的地址 3、將如下內容寫入/etc/hosts文件中&#xff08;如果有多個ip地址則寫多行&…

如何開發 HTML 游戲

開發 HTML 游戲適合初學者學習編程和游戲開發的基礎知識。HTML 游戲通常結合了 HTML、CSS 和 JavaScript 技術&#xff0c;利用瀏覽器的渲染能力來實現交互式的游戲體驗。 1. 確定游戲類型 在開始開發之前&#xff0c;你需要明確你的游戲類型。例如&#xff1a; 簡單游戲&…

我的NISP二級之路-02

目錄 一.數據庫 二.TCP/IP協議 分層結構 三.STRIDE模型 四.檢查評估與自評估 檢查評估 自評估 五.信息安全應急響應過程 六.系統工程 七.SSE-CMM 八.CC標準 九.九項重點工作 記背: 一.數據庫 關于數據庫恢復技術&#xff0c;下列說法不正確的是&#xff1a…

結構化需求分析:專業方法論與實踐

結構化需求分析是一種用于軟件開發或其他項目中的系統分析方法&#xff0c;旨在全面、準確地理解和描述用戶對系統的需求。以下是關于結構化需求分析的詳細介紹&#xff1a; 一、概念 結構化需求分析是采用自頂向下、逐步分解的方式&#xff0c;將復雜的系統需求分解為若干個…

windows10安裝配置并使用Miniconda3

windows10安裝配置并使用Miniconda3 Conda 與 Anaconda 的區別 Conda 是包管理和環境管理工具&#xff0c;Anaconda 在 Conda 的 基礎上預裝了大量科學計算包 Conda 與 pip 的區別 Conda 是跨語言的包和環境管理器&#xff08;支持 Python/R 等&#xff09;&#xff0c;能安…

PyTorch中的Flatten

在 PyTorch 中&#xff0c;Flatten 操作是將多維張量轉換為一維向量的重要操作&#xff0c;常用于卷積神經網絡(CNN)的全連接層之前。以下是 PyTorch 中實現 Flatten 的各種方法及其應用場景。 一、基本 Flatten 方法 1. 使用 torch.flatten() 函數 import torch# 創建一個4…

Spring Boot + MyBatis + Maven論壇內容管理系統源碼

項目描述 xxxForum是一個基于Spring Boot MyBatis Maven開發的一個論壇內容管理系統&#xff0c;主要實現了的功能有&#xff1a; 前臺頁面展示數據、廣告展示內容模塊&#xff1a;發帖、評論、帖子分類、分頁、回帖統計、訪問統計、表單驗證用戶模塊&#xff1a;權限、資料…

探索AI編程規范化的利器:Awesome Cursor Rules

在AI輔助編程逐漸成為開發者標配的今天,如何讓AI生成的代碼既符合項目規范又保持高質量,成為開發者面臨的新挑戰。GitHub倉庫**awesome-cursorrules**正是為解決這一問題而生的開源項目,它通過系統化的規則模板庫,重新定義了AI編程的規范邊界。本文將深入解析這一工具的核心…

AnimateCC基礎教學:json數據結構的測試

一.核心代碼: const user1String {"name": "張三", "age": 30, "gender": "男"}; const user1Obj JSON.parse(user1String); console.log("測試1:", user1Obj.name, user1Obj.age, user1Obj.gender);/*const u…

阿里云域名證書自動更新acme.sh

因為阿里云的免費證書只有三個月的有效期&#xff0c;每次更換都比較繁瑣&#xff0c;所以找到了 acme.sh&#xff0c;還有一種 certbot 我沒有去了解&#xff0c;就直接使用了 acme.sh 來更新證書&#xff0c;acme.sh 的主要特點就是&#xff1a; 支持多種 DNS 服務商自動化續…

PDF 中提取數學公式

? 方法一&#xff1a;使用 doc2x extract_formula_imgs Pix2Text 一鍵運行腳本&#xff08;自動提取識別&#xff09; &#x1f449; 適合你如果用 Python 的話&#xff0c;只需要運行一段腳本即可&#xff1a; ? &#x1f501; 一步搞定腳本&#xff08;僅需安裝一次&…

SQL并行產生進程數量問題

有一些數據庫性能問題可能是因為同時啟動的并行進程過多造成的&#xff0c;特別常見于RAC節點重啟&#xff0c;很多時候是因為瞬間啟動了幾百個并行進程&#xff0c;導致OS各項指標“彪高”&#xff0c;后臺進程失去響應。最近遇到的一個&#xff0c;是因為SQL語句中寫了/* par…