数据库原理 简单基础入门
數據庫數據特點
Massive 數據量大
Presistent 持久
Safe 安全
Multi-user 多用戶
convenient 方便
Efficient 高效
feliable 可靠
一個數據庫網站
https://db-engines.com/en/
數據庫的基礎概念
數據和信息
信息:客觀事物的存在方式和狀態
數據:用來記錄信息的可識別的符號 是信息的具體表現形式
數據與信息的連接:數據是信息的載體 信息是數據的內涵
數據庫 數據管理系統 數據庫系統 數據庫管理員
數據庫:
是長期存儲在計算機內 有組織的 可共享 ,可存儲,可讀寫的數據集合
數據庫管理系統:
用戶與操作系統之間的一層數據管理軟件
數據庫系統的體系結構
三層模式 兩層印象
邏輯模式:數據庫中全體數據的邏輯結構和特征的描述,邏輯模式與具體的物理實現細節無關,是一種體現用戶需求的公共數據結構,(類似于中間件),一個數據庫只有一個邏輯模式
外模式:具體使用者看到的數據結構(局部數據的邏輯結構和特征),一個應用有多個外模式
內模式:數據物理結構和存儲方式的描述,數據在數據庫內部的表示方式,一個數據庫只有一個內模式
外模式印象:每一個外模式對應一個外模式印象,定義外模式與邏輯模式的對應關系
內模式印象:定義數據全局的邏輯結構與存儲結構之間的對應關系
兩級印象保證數據的邏輯獨立性和物理獨立性。
當內模式改變了,只要改變內模式印象就可以不改變邏輯模式
當邏輯模式改變了,改變兩級印象,就可以不改變外模式和內模式
數據模型
數據模型要滿足模擬真實世界,便于理解,便于實現。
數據結構
數據操作
數據的約束條件
關系模型
半結構化模型
?網狀模型//早期模型
?層次模型
?XML //網絡數據表示格式,傳輸和存儲數據
?JSON
不同的模型具體區別就是數據結構不同
數據管理技術的產生和發展
人工管理階段
文件管理階段
數據庫系統
關系數據庫
關系數據模型
關系型: 表 、SQL
非關系型: noSQL
關系數據庫系統: 是支持關系模型的數據庫系統
關系模型:
?關系數據結構
?關系操作
?完整性約束
關系數結構:
?單一的數據結構:關系
??實體及實體間的聯系均用各種關系來表示
?數據的邏輯結構:二維表
??關系模型中的數據結構就是一張二維表
關系模型建立在幾何代數之上
域:一組具有相同數據類型的值的集合
笛卡爾積:
笛卡爾積每行代表一個元組,每列代表一個域。
關系:
關系也是一個二維表
?每行表示一個元組
?每列是一個域,表示一個屬性
碼(key,鍵)
候選碼:在關系中唯一能標識元組的屬性或屬性集
主屬性:候選碼的各個屬性
主碼:用戶選作元組表示的候選鍵
全碼:關系的說有屬性是這個關系的全碼
基本關系的性質:
? 列是同質的
?列的順序無所謂
?行的順序無所謂
什么是關系模式
? 關系模式是對關系的描述
? 學生(學號,姓名,年齡,性別,籍貫)
? R(A1,A2,A3,A4,A5)
? 關系是關系模式在某時刻的取值
關系數據庫:
在一個給定的應用領域中,實體及實體之間聯系的關系的集合構成一個關系數據庫
關系操作:
? 查詢 插入 刪除 修改
關系操作特點:
?集合操作方式
關系數據語言的種類:
? 關系代數的語言
? 關系演算的語言
關系的完整性約束:
? 實體完整性
? 參照完整性
? 用戶定義的完整性
(前兩者必須滿足)
實體完整性:
? 主碼唯一且不為空
? 主屬性不能取空
參照完整性:
外碼:
?一個關系中的某個屬性是某個關系的主碼,外碼作為主碼的關系是參照表
?外碼必須取參照表的合適值或者空置
用戶自定義的完整性:
? 用戶自己定義的規則
關系數據語言
關系代數
一種抽象的數據查詢語言
用對關系的運算來表達查詢
關系代數 關系演算 :早期 ,現在不用
關系代數:
? 并 差 交
? 投影 選擇
? 笛卡爾積、連接
? 重命名
運算對象:關系
運算符:4類
運算結果:關系
投影:
選擇:
笛卡爾積:
連接Join:
等值連接,大于連接,小于連接
自然連接:在等值連接上去除重復的列
重命名:
等價運算:
運算符優先級:
表達樹:
SQL (Structured Query Language)
DDL
數據定義語言
定義表:
? 創建表
? 刪除表
? 修改表定義
定義基本表:
?關系名(表名)
?屬性名(列名)
?屬性數據類型
?完整性約束
SQL支持的數據類型:
整型:
bigint 8個字節
int 4個字節
smallint 2個字節
tinyint 1個字節
bit 只能取0或者1
精確數值數據:
decimal (p,q) p數據寬度,q小數點后面的位數
numeric
浮點數類型:
float 8個字節存儲數據 ±3.04E+308
real 位數為24 4個字節 ±3.04E+38
字符串數據類型:
char : char(n)固定長度為n個字符的字符串
varchar:varchar(n),可變長度,最長長度為n個字符串
日期時間數據:
data :DATE ‘yyyy-mm-dd’
time:‘hh:mm:ss’
datatime:
主鍵唯一不能為空值,唯一鍵可以為空值。
FOREIGN外鍵 REFERENCE參照表
修改基本表:
刪除基本表:
DML
數據操作語言
查詢:
From之后都是SELECT的子句
單表查詢
單表查詢:選擇僅涉及一個表
SELECT:選擇表中的若干列
WHERE :選擇表中的若干元組
ORDER BY:對查詢結果排序
GROUP BY: 對查詢結果分組
HAVING:對分組之后的結果進行篩選
通配符:
通配符配合like使用,like是模糊匹配符
對于某些情況下 只是希望通配符作為普通字符,可以使用轉移字符,
a_b 就是普通的a_b
.
IS NULL 表示 = NULL,= NULL會報錯
.
集函數:
統計時不計NULL值
HAVING對分組之后的結果再做篩選
.
連接查詢
select Stu.* ,SC.* From Stu, SC;--廣義笛卡爾積--等值連接,查詢每個學生及其選修課的情況 select Stu.* ,SC.* From Stu, SC where Stu.sno = SC.sno;--查詢計算機系學生的學號 姓名 所在系 選修的課程名及成績 select SC.sno ,Sname,ssdept,SC.Cno,Cname,Grade From Stu ,SC,Course where Stu.Sno = Sc.sno and Course.cno = SC.cno and ssdept = 'CS';--自身連接 select a1.Cname as major, a2.Cname as preMajor FROM Course a1,Course a2 where a1.Cpno = a2.cno--要起別名嵌套查詢
集合操作
修改數據:
刪除數據:
數據控制語言
INDEX
定義索引
索引就是給某一列創建一個排序,使用查詢語句時,如果創建的索引合適就會加速查詢的速度,反過來索引會降低表更新或者插入的速度
VIEW
虛表,從一個或幾個基本表導出的表 ,只存放視圖的定義 不會出現數據冗余
定義視圖:
建立
定義基于該視圖的新視圖
刪除
常見視圖形式:
刪除視圖
查詢視圖:
查詢視圖與查詢基本表的方法基本一樣
更新視圖:
嵌入式SQL
DCL
數據庫設計
數據庫設計步驟
構造最優的數據模型,建立數據庫及其應用系統的過程
數據分析 ->數據建模->關系數據庫模式->關系數據庫管理
數據庫設計全過程:
規劃階段:
需求分析階段:
概念設計階段:
概念設計反映用戶需求的數據庫概念結構的概念模型,具有硬件獨立,軟件獨立的特點。
局部概念模型->全局概念模型->評審
概念設計方法 ER方法 得到一個與DBMS無關的概念模型
邏輯設計階段:
將概念模型轉換成DBMS支持的數據模型相符合的邏輯結構
概念模型 -> 設計外模型 -> 設計應用程序與數據庫的接口->評價模型->修正模型
物理設計階段:
存儲記錄結構設計
確定數據存放位置
存取方法設計
完整性和安全性考慮
程序設計
數據庫的實現:
用DDL定義數據庫結構
組織數據入庫
編制調試應用程序
數據庫試運行
數據庫的運行與維護:
小結:
數據庫的各級模式是在設計過程中逐步形成的
需求分析階段綜合各個用戶的應用需求
概念設計獨立于機器特點,獨立于各個DBMS產品的概念模式 用ER圖來描述
概念設計工具
ER圖:
ER模型組成元素:
實體 :對應客觀世界的某一物體
實體集:多個實體組成
屬性 :實體的某一個特征稱為屬性,在ER圖中加下劃線的為實體標識符
聯系:表示一個或多個實體之間的關聯關系
1:1 聯系:兩個實體集之間的實體一一對應
1:m 聯系:實體集1中的每個實體對應實體及的多個實體,反過來實體集2的多個實體對應實體集1的一個實體
m: n 聯系:實體集1的多個實體對應實體集2的多個實體
E模型概念設計的步驟:
設計局部ER模型,
綜合局部ER模型得到全局模型
對全局模型優化得到最終ER模型
屬性不可再分:如下圖中的職稱不能作為一個屬性
如果聯系有屬性,就考慮把聯系轉化為實體
案例分析:
ER模型轉換成關系模式:
步驟一:實體類型的轉換
每個實體類型轉換成一個關系模式,實體的屬性即為關系模式的屬性,實體標識符即為關系模式的鍵
步驟二:聯系的轉換
二元聯系轉化
案例:
ER模型的邏輯設計步驟:
導出初始關系模式集
規范化處理
模式評價
模式修正
設計子模式
小結:
ER模型的基本元素
聯系的設計
采用ER模型的概念設計步驟
ER模型轉化為關系模式
UML圖
邏輯設計工具
針對一個問題,確定應該構幾個關系,每個關系由哪些屬性組成
規范化理論是數據庫邏輯設計的工具
關系:描述實體及其屬性、實體間的聯系
關系模式: 用來定義關系
關系數據庫:基于關系模型的數據庫 利用關系來描述現實世界
關系數據庫的模式: 定義這組關系的關系模式的全體
數據依賴:
定義屬性間的相互關聯。
函數依賴
平凡函數依賴與非平凡函數依賴
完全函數依賴與部分函數依賴
傳遞函數依賴
碼
函數依賴:
多值依賴:
鏈接依賴:
關系模式的評價分析:
數據是否冗余過大
更新異常
插入異常
刪除異常
對于不合適的關系模式可以分解模式
范式:
范式是數據庫中關系滿足一定要求的不同級別的集合
1NF
一個關系模式R中的所有屬性都是不可分的基本數據項,關系數據庫的基本要求
2NF
滿足一范式的基礎上,不存在部分函數依賴的關系模式
3NF
滿足二范式的基礎上,不存在傳遞函數依賴的關系模式
BC范式(達到BC范式即可滿足一般要求)函數依賴的最高級別
小結:
規范換程度較低的范式會存在 插入異常 刪除異常 修改復雜 數據冗余的問題,將低級范式轉換為高級范式 的方法:模式分解
4NF
數據庫管理
數據庫安全性
只允許有合法使用權限的用戶訪問允許他存取的數據
非法使用數據庫的情況:
用戶繞過DBMS的數據庫授權機制,通過操作系統直接存取 修改 備份數據庫中的操作
通過多次查詢數據,推到出本沒有權限查看的數據
安全性控制方法:
定義存儲權限:
數據對象,操作類型、
定義一個用戶可以在那些對象上進行那些操作
檢查存取權限:
鍵槽用戶操作請求是否超出權限
授權粒度:
可以定義的數據對象的范圍,粒度越細,授權越靈活
數據對象粒度:
數據庫
表
屬性列
行
GRANT 授權
REVOKE回收權限
可以將視圖機制與授權機制配合使用
審計日志:將用戶所有操作都記錄
數據加密:
將原始數據轉化為密文
并發安全控制
事務:
一致性:
隔離性:
持續性:
丟失修改:
不可重復讀:
讀臟數據:
并發控制:
可串行化的調度:
封鎖
事務使用某個數據對象之前,對期加鎖,限制其他事務對該數據的更新,是并發控制關鍵。
排他鎖:
共享鎖:
鎖的相容表:
封鎖粒度:
可以對整個數據庫加鎖,也可以只對某個屬性加鎖。
封鎖協議:
何時申請加鎖
持鎖時間
何時釋放
三級封鎖協議: 保證數據一致性
一級封鎖協議:
2級封鎖協議:
三級封鎖協議:
**兩段鎖協議:**保證并行可調度性
死鎖和活鎖:
活鎖:
某個事務永遠等待,解決辦法,采用先來先服務策略
死鎖
死鎖預防:
一次封鎖法
順序封鎖法
診斷并解除
超時法:事務等待超過一定時間,就任務發生了死鎖
等待圖法
故障和恢復
數據庫故障:
事務故障:事務運行過程中,非正常終止
系統故障:計算機系統非正常結束,內存區數據丟失
介質故障: 外存中數據意外丟失
恢復:
數據轉儲:
將整個數據復制到另一個磁盤,解決介質故障
靜態轉儲
動態轉儲
海量轉儲與增量轉儲
日志文件:
登錄日志文件的數據:
事務故障恢復:
系統故障恢復:
小結:
數據庫復制
數據庫復制方式:
對等復制:
主從復制:
級聯復制:
數據庫復制要求:
用戶透明
保持事務完整性
避免沖突
數據庫鏡像:
自動把整個數據庫復制到另一個磁盤上,出現故障時,自動恢復。
實現X鎖和S鎖的控制
總結
以上是生活随笔為你收集整理的数据库原理 简单基础入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LibSVM使用记录 C++ Visua
- 下一篇: “QMYSQL: Unable to a