數據庫課程複習總結



1.DBMS的主要功能:
  (1)數據定義功能  提供數據定義語言(DDL),定義數據庫中的數據對象
  (2)數據的組織、存儲、管理  提高存儲空間的利用率和方便存取,提供多種存取方法來提高存取效率
  (3)數據操縱功能  提供數據操縱語言(DML),實現對數據庫的基本操作(查詢、插入、刪除、修改)
  (4)數據庫的事務管理和運行管理  保證數據的安全性、完整性,多用戶對數據的併發使用,發生故障後的系統恢復
  (5)數據庫的建立和維護功能  數據庫的批量裝載,數據庫轉存,介質故障恢復,數據庫的重新組織,性能監視等


數據庫的三級模式:外模式--->模式---->內模式


數據庫的模式結構
內模式:一個數據庫只有一個內模式,內模式也稱存儲模式,是數聚物理結構和存取方式的描述,是數據庫內部的表示方式
記錄的存儲方式(如順序存儲,按照B樹結構存儲,按hash方法存儲等)
索引的組織方式
數據是否壓縮存儲
數據是否加密
數據存儲記錄結構的規定


模式也稱邏輯模式或者概念模式,是數據庫中全體數據的邏輯結構和特徵的描述,是所有用戶的公共數據視圖,
綜合了所有用戶的需求一個數據只有一個模式


模式的地位:是數據庫系統模式結構的中間層,與數據的物理存儲細節和硬件環境無關,與具體的應用程序
開發工具及高級語言程序有關


模式的定義
數據的邏輯結構(數據項的名字、類型、取值範圍等)
數據之間的聯繫
數據有關的安全性、完整性要求


外模式
也稱子模式或者用戶模式,是數據庫用戶(包括應用程序員和最終用戶)使用的局部數據的邏輯結構和特徵的描述。是數據庫用戶的
數據視圖,是與某一應用有關的數據邏輯表示


外模式的地位:介於模式與應用之間,通常是模式的子集(一對多)。一個數據庫可以有多個外模式。反映了不同的用戶的應用需求、
看待數據的方式、對數據保密的要求


對模式中同一數據,在外模式中的結構、類型、長度、保密級別等都可以不同,同一外模式可以爲某一用戶的多個應用系統所使用,
但一個應用程序只能使用一個外模式。


外模式的用途 保證數據庫安全性的一個有力措施。每個用戶只能看見和訪問所對應的外模式中的數據


三級模式和二級映像


外模式/模式映像  
定義模式和外模式之間的對應關係
每一個外模式都對應一個外模式/模式映像
映像定義通常包含在各個外模式的描述中


外模式/模式映像的用途
保證數據邏輯獨立性
當模式改變時,數據庫管理員修改有關的外模式/模式映像,是外模式保持不變
應用程序是基於外模式編寫的,從而應用程序不必修改,保證數據與應用程序的邏輯獨立性,簡稱數據的邏輯獨立性


模式/內模式映象
定義了數據全局邏輯結構與存儲結構之間的對應關係。
eg,說明邏輯記錄和字段在內部是如何表示的
數據庫中的模式/內模式映象是唯一的
該映象定義通常包含在模式描述中


模式/內模式映象的用途
保證數據的物理獨立性
當數據庫的存儲結構改變了(例如選用了另一種存儲結構),數據庫管理員修改模式/內模式結構。是模式保持不變
應用程序不受影響,保證數據與程序的物理的獨立性,簡稱數據的物理獨立性


數據模型
在數據庫中
,數據模型被用來對現實世界中的數據和信息進行抽象、表示和處理


數據模型是用戶對現實世界的視圖與計算機存儲二進制數據的橋樑


數據模型是數據庫系統的核心和基礎


數據模型的三方面要求:
能比較認真的模擬現實世界
容易爲人所理解
便於在計算機上實現




數據模型的組成要素
數據結構
描述數據庫的組成對象以及對象之間的聯繫,是刻畫數據模型性質最重要的方面(按數據結構命名數據模型),是對系統靜態特性的表述。
數據操作
指該數據結構上的各種實例允許操作的集合,包括相關的操作規則,是對系統動態特性的描述
數據的約束條件
指該數據結構上的各種實例允許操作的集合,包括相關的操作規則,是對系統動態特性的描述




數據模型:邏輯模型和物理模型


邏輯模型 層次模型、網狀模型、關係模型、面向對象的模型、對象關係模型


關係模型中的基本概念
關係模型的基本概念
關係(Relation)一個關係對應通常說的一張表。
元組(Tuple)表中的一行即爲一個元組。
屬性(Attribute)表中的一列即爲一個屬性,給每一個屬性起一個名稱,即屬性名。
分量  元組中的一個屬性值。


域(Domain)
屬性的取值範圍。
關係模式
對關係的描述 關係名(屬性1,屬性2,…,屬性n)
學生(學號,姓名,年齡,性別,系,年級)
關鍵字或碼(Key)
表中的某個屬性組,它可以唯一確定一個元組。
候選關鍵字或候選碼
多個屬性組都能夠唯一確定一個元組


主鍵或主碼(primary  Key)
若干候選碼中指定作爲關鍵字的屬性組。
主屬性和非主屬性
主屬性:包含在任何候選關鍵字中的各個屬性
非主屬性:不包含再任何一個候選碼中的屬性
外鍵或外碼
某個屬性,不是本關係的主碼,卻是另一個關係的主碼


關係模型的完整性約束
實體完整性 
  實體完整性要求每一個表中的主鍵字段都不能爲空或者重複的值。
參照完整性(一個屬性是外碼的話要麼是空,要麼是那個關係中的屬性值)
  如果屬性(組)F是基本關係R的外碼,它與基本關係S的主碼Ks相對應(基本關係R與S不一定是不同的關係),則對於R中的每個元組在F上的值必須爲:或者取空值(F的每個屬性都爲空);或者等於S中某個元組的主碼值。
用戶自定義完整性 
  由用戶根據實際情況對數據庫中數據庫中的數據的內容進行的規定,這些約束條件就是用戶根據需要自己定義的。eg性別屬性只有男和女


關係數據結構
域:具有相同數據類型的值的集合


關係:D1 × D2 ×.... × Dn的子集叫做在域D1,D2,...,Dn上的關係。記爲:R(D1,D2,...,Dn)其中:
R—表示關係名
n —稱爲關係的目或度,1單元關係,2二元關係
t  —表示關係中的元組。


元組:關係是笛卡爾積的有限子集,所以是一個二維表,表的每行對應一個元組,每列對應一個域。


屬性:域可以相同,爲了區分域,必須對每列起一個名字,稱爲屬性(Attribute)。


候選碼(Candidate key) :若關係中的某一(最小)屬性組的值能唯一地標識一個元組,則該(最小)屬性組稱爲候選碼。


主碼(Primary key) :若關係中有多個候選碼,則選定其中的一個爲主碼。


主屬性(Prime attribute):候選碼的諸屬性稱爲主屬性。


非主屬性(Nonprimary attribute):不被任何候選碼包含的屬性。


全碼(All-key):關係模式的所有屬性都是這個關係模式的候選碼


關係的類型
基本關係 通常稱爲基本表或基表,實際存在的表,實際存儲數據的邏輯表示
查詢表  查詢結果對應的表
視圖表  由基本表或其他視圖導出的表,稱爲虛表 不對應實際存儲的數據


關係的性質
1.列是同質的,列的屬性值是同一類型的數據,來自同一個域
2.不同的列可出自同一個域,每一列稱爲一個屬性,每個屬性必須有不同的屬性名,屬性名可以表示不同的屬性
3.列的順序可以任意交換
4.任意兩個元組不能完全相同,由主鍵標識
5.元組的順序可以任意交換
6.分量必須取原子值,即每一個分量必須是不可分的數據項,不允許表中有表的情況


關係實例是個表,關係模式是描述表的列頭信息


關係模式:
描述關係的名字,每個field (或column或attribute)和每個field的域(domain).在關係模式中,域由域名和與之相關的一組值相關。
關係實例:
是元組的集合,這些元組也叫做記錄,每個元組有與模式相同數目的列。由於每個元組是一個行,所有行有相同的列,因此關係實例可以被認爲是一個表。當不混淆時,關係實例簡稱關係。


關係模式:對關係的描述稱爲關係模式。可以形式化的表示爲:R(U,D,dom,F)
其中:
R:關係名
U:組成關係的屬性名集合
D:屬性來自的域
dom:屬性到域的映射
F:屬性間數據的依賴關係
簡記:R(U),或者R(A1,A2,…An)




關係模型的完整性規則是對關係的某種約束條件


實體完整性和參照完整性是關係模型必須滿足的完整性約束條件,被稱作是關係的兩個不變性,應該由關係系統自動支持。


外碼:
設F是基本關係R的一個或一組屬性,但不是關係的碼。若F與基本關係S的主碼Ks相對應,則稱F是基本關係的外碼。基本關係R爲參照關係,S爲被參照關係或目標關係


象集的概念


DML 數據庫操縱語言


常用完整性約束
1.主碼約束: primary key
2.唯一性約束:unique
3.非空值約束:not null
4.參照完整性約束:foreign key


create table Course(
Cno varchar(10) primary key,
Cname varcha(20) not null,
Cpno varchar(2),
foreign key (Cpno) references Course(Cno) //聲明外鍵參照關係
);
create table XSS(
學號 varchar(12) primary key,
姓名 varchar(10) not null,
性別 varchar(2) constraint check_sex CHECK(性別 in ('男','女'))
);
create table SC(
Sno varchar(7),
Cno varchar(4),
primary key (Sno,Cno),
foreign key (Sno) references student(Sno)
);


創建表
create table 表名(
列名(屬性) 類型  約束,
列名(屬性) 類型  約束,
....,
約束1,
約束2
);
constraint 爲約束指定別名
eg:
--建表時指定了約束名
CREATE TABLE tb_constraint_2
(
empno NUMBER CONSTRAINT pk_tb_cons2_empno PRIMARY KEY,
ename VARCHAR2(20) CONSTRAINT nn_tb_cons2_empno NOT NULL,
email VARCHAR2(60) CONSTRAINT un_tb_cons2_email UNIQUE,
sal   NUMBER(5) CONSTRAINT ck_tb_cons2_sal CHECK(sal>1500),
deptno NUMBER(4) CONSTRAINT fk_tb_cons2_dept REFERENCES tb_dept(deptno)
);


刪除基本表:
drop table 表名;


修改基本表:添加列
alter table 表名
ADD 列名 類型;
//添加約束
alter table 表名 
ADD constraint ph primary key student(Sname);//ph約束的別名


刪除表的約束:
alter table 表名
drop constraint ph primary key student(Sname);
drop unique(sname)


//改變列的數據類型
alter table 表名
alter column 列名 新類型;


//插入元素
insert into 表名(列名) values (...);
如果全部一個正行
insert into 表名 values (...);
insert into Student values ('95020','陳東','男','IS','18');
insert into SC(Sno,Cno) values ('95020','1');


update student set Sage=22 where Sno='95001';


DELETE 語句用於刪除表中的行。
DELETE FROM 表名稱 WHERE 列名稱 = 值
刪除所有學生的選課記錄
delete from SC;


消除重複元素 distinct 全部 all


where語句常用的查詢條件
查詢條件 謂詞
比較 =,>,<,>=,<=,!,=!,<>,!<,!>
確定範圍 between..and...,not between..and...
確定集合 in,not in
字符匹配 like,not like
空值 is null,is not null
多重條件 and,or


Like:
當匹配模板爲固定字符串時
用=運算來代替LIKE 用!= 或<> 代替not LIKE


模糊查詢
% (百分號)  代表任意長度(長度可以爲0)的字符串
_ (下橫線)  代表任意單個字符
當用戶要查詢的字符串本身就含有 % 或 _ 時,要使用ESCAPE '<換碼字符>' 短語對通配符進行轉義。


查詢DB_Design課程的課程號和學分
select Cno,Ccredit from Course 
where Cname LIKE 'DB\_Design' ESCAPE '\';


使用ORDER BY子句
可以按一個或多個屬性列排序
升序:ASC;降序:DESC;缺省值爲升序
當排序列含空值時
ASC:排序列爲空值的元組最後顯示
DESC:排序列爲空值的元組最先顯示 
order by 列名 [ASC|DESC]


聚集函數的查詢


使用GROUP BY子句分組
細化聚集函數的作用對象
未對查詢結果分組,聚集函數將作用於整個查詢結果
對查詢結果分組後,聚集函數將分別作用於每個組 
只有滿足HAVING短語指定條件的組才輸出 


分組方法:按指定的一列或多列值分組,值相等的爲一組
使用GROUP BY子句後,SELECT子句的列名列表中只能出現分組屬性和聚集函數


查詢有3門以上課程是90分以上的學生的學號及(90分以上的)課程數
select Sno,count(*) from sc where Grade>90 group by Sno having count(*)>3


having和where的區別 作用對象不同
WHERE子句作用於基表或視圖,從中選擇滿足條件的元組。
HAVING語句作用於組,從中選擇滿足條件的組


SQL中連接查詢的主要類型
廣義笛卡爾積
等值連接(含自然連接)
非等值連接查詢
自身連接查詢
外連接查詢
複合條件連接查詢


select student.* ,sc.* from student,sc where student.sno=sc.sno


自身連接 一個表與其自己進行連接,稱爲表的自身連接
需要給表起別名以示區別
由於所有屬性名都是同名屬性,因此必須使用別名前綴
select FIRST.Cno, Second.Cpo from Course FIRST ,Course Second where FIRSE.Cpo=Second.Cno


外連接
外連接與普通連接的區別
普通連接操作只輸出滿足連接條件的元組
外連接操作以指定表爲連接主體,將主體表中不滿足連接條件的元組一併輸出


select student.* ,sc.* from student left join sc where student.sno=sc.sno


子查詢的限制:不能使用ORDER BY子句


帶有ANY或ALL謂詞的子查詢
ANY:任意一個值
ALL:所有值
配合使用比較運算符的含義
> ANY 大於子查詢結果中的某個值       
> ALL 大於子查詢結果中的所有值
< ANY 小於子查詢結果中的某個值    
< ALL 小於子查詢結果中的所有值
>= ANY 大於等於子查詢結果中的某個值    
>= ALL 大於等於子查詢結果中的所有值
<= ANY 小於等於子查詢結果中的某個值    
<= ALL 小於等於子查詢結果中的所有值
= ANY 等於子查詢結果中的某個值        
=ALL 等於子查詢結果中的所有值(沒有實際意義)
!=(或<>)ANY 不等於子查詢結果中的某個值
!=(或<>)ALL 不等於子查詢結果中的任何一個值


相關子查詢和不相關子查詢


不相關子查詢 子查詢的查詢條件不依賴於父查詢 處理方式:
由裏向外逐層處理。即每個子查詢在上一級查詢處理之前求解,子查詢的結果用於建立其父查詢的查找條件。


相關子查詢 子查詢的查詢條件依賴於父查詢 處理方式:
首先取外層查詢中表的第一個元組,根據它與內層查詢相關的屬性值處理內層查詢,
若WHERE子句返回值爲真,則取此元組放入結果表;
然後再取外層表的下一個元組;
重複這一過程,直至外層表全部檢查完爲止


帶有EXISTS謂詞的子查詢
EXISTS謂詞
存在量詞 
帶有EXISTS謂詞的子查詢不返回任何數據,只產生邏輯真值“true”或邏輯假值“false”。
若內層查詢結果非空,則返回真值
若內層查詢結果爲空,則返回假值
由EXISTS引出的子查詢,其目標列表達式通常都用* ,因爲帶EXISTS的子查詢只返回真值或假值,給出列名無實際意義


集合查詢
參加UNION操作的各結果表的列數必須相同;對應項的數據類型也必須相同
union 並
intersect 交
minus 差


對集合操作結果的排序
select × from student where Sdept='CS'
UNOIN
select * from studnet where Sage<=19
order by 1;
ORDER BY子句只能用於對最終查詢結果排序,不能對中間結果排序
任何情況下,ORDER BY子句只能出現在最後
對集合操作結果排序時,ORDER BY子句中可用數字指定排序屬性


視圖是從一個或者幾個基本表(或視圖)導出的表


視圖的特點
1.虛表,是從一個或幾個基本表(或視圖)導出的表
2.只存放視圖的定義,不會出現數據冗餘
3.基表中的數據發生變化,從視圖中查詢出的數據也隨之改變


DBMS執行CREATE VIEW語句時只是把視圖的定義存入數據字典,並不執行其中的SELECT語句。在對視圖查詢時,按視圖的定義從基本表中將數據查出。


with check option
透過視圖進行增刪改操作時,不得破壞視圖定義中的謂詞條件(即子查詢中的條件表達式)


1.對於update,有with check option,要保證update後,數據要被視圖查詢出來 
2.對於delete,有無with check option都一樣 
4.對於insert,有with check option,要保證insert後,數據要被視圖查詢出來 
對於沒有where 子句的視圖,使用with check option是多餘的


從用戶角度:查詢視圖與查詢基本表相同
DBMS實現視圖查詢的方法
實體化視圖(View Materialization)
有效性檢查:檢查所查詢的視圖是否存在
執行視圖定義,將視圖臨時實體化,生成臨時表
查詢視圖轉換爲查詢臨時表
查詢完畢刪除被實體化的視圖(臨時表)
視圖消解法(View Resolution)
進行有效性檢查,檢查查詢的表、視圖等是否存在。如果存在,則從數據字典中取出視圖的定義
把視圖定義中的子查詢與用戶的查詢結合起來,轉換成等價的對基本表的查詢
執行修正後的查詢


指定WITH CHECK OPTION子句後 DBMS在更新視圖時會進行檢查,防止用戶通過視圖對不屬於視圖範圍內的基本表數據進行更新


視圖的作用
1. 視圖能夠簡化用戶的操作 當視圖中數據不是直接來自基本表時,定義視圖能夠簡化用戶的操作
基於多張表連接形成的視圖
基於複雜嵌套查詢的視圖
含導出屬性的視圖
2. 視圖使用戶能以多種角度看待同一數據 視圖機制能使不同用戶以不同方式看待同一數據,適應數據庫共享的需要
3.視圖對重構數據庫提供了一定程度的邏輯獨立性
4. 視圖能夠對機密數據提供安全保護 對不同用戶定義不同視圖,使每個用戶只能看到他有權看到的數據
5.適當的利用視圖可以更清晰的表達查詢


建立索引是加快查詢速度的有效手段


建立索引的語法
create [unique|cluster] index 索引名 on 表名(列名);
用<表名>指定要建索引的基本表名字
索引可以建立在該表的一列或多列上,各列名之間用逗號分隔
用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE表明此索引的每一個索引值只對應唯一的數據記錄
CLUSTER表示要建立的索引是聚簇索引


唯一值索引:
對於已含重複值的屬性列不能建UNIQUE索引
對某個列建立UNIQUE索引後,插入新記錄時DBMS會自動檢查新記錄在該列上是否取了重複值。這相當於增加了一個UNIQUE約束


聚簇索引
在一個基本表上最多隻能建立一個聚簇索引
聚簇索引的用途:對於某些類型的查詢,可以提高查詢效率
聚簇索引的適用範圍
很少對基表進行增刪操作
很少對其中的變長列進行修改操作 


刪除索引
drop index 索引名


grant授權


數據庫設計
需求分析--概念結構分析---邏輯結構設計---物理設計----實施階段---運行維護


數據字典是各類數據描述的集合,是進行詳細的數據收集和數據分析所獲得的主要結果,在數據庫設計中佔有很重要的地位。


數據字典的內容:
數據項
數據結構
數據流
數據存儲
處理過程


數據項是數據的最小組成單位,若干個數據項可以組成一個數據結構


數據字典通過對數據項和數據結構的定義來描述數據流,數據存儲的邏輯內容


概念模型:
基本概念
實體  屬性  碼 域 實體型 實體集 聯繫
實體集  同型試題的集合
聯繫 不同實體間的聯繫
一對多
一對一
多對多


實體的概念:
客觀存在並可以相互區別的事物成爲實體,可以是具體的人,事,物或抽象的概念


屬性的概念
實體所具有的某一特性稱爲屬性。一個實體可以由若干個屬性來刻畫


碼的概念
唯一標識實體的屬性集稱爲碼



屬性的取值範圍


實體型
用實體名及其屬性名集合來抽象和刻畫,同類的實體稱爲實體型


實體集
同型實體的集合稱爲實體集


聯繫
現實世界中的事物內部以及事物之間的聯繫在信息世界中的反映稱爲實體內部的聯繫和實體之間的聯繫


概念模型用ER圖表示
實體-聯繫(E-R模型)圖 世界有一組稱爲實體的基本對象及這些對象之間的聯繫組成


ER模型基本概念
屬性的劃分
簡單屬性/複合屬性
--簡單屬性不能再劃分爲更小部分的屬性
--複合屬性可以再劃分爲別的屬性的屬性
單值屬性/多值屬性
--單值屬性對一個特定的實體而言一個屬性只有單獨的一個值
--多值屬性對某個特定的實體來說,一個屬性可以對應一組值
派生屬性
這類屬性可以從別的相關屬性或實體派生出來


超碼:是一個或多個屬性的集合,該組合可以在該實體集中唯一標識一個實體。
候選碼:它的任意真子集都不能成爲超碼。(最小超碼)
主碼:被數據庫設計者選中的,用來在同一實體集中區分不同實體的候選碼。


一般原則
屬性不能再具有需求的性質,即屬性必須是不可分的數據項,不能再由另一些屬性組成


屬性不能與其他實體具有聯繫,聯繫只發生在實體之間


什麼是數據依賴
數據依賴是關係中的屬性值之間相互關係。它是現實世界屬性間相互聯繫的抽象,是數據內在的性質,是語義的體現。
通俗的將,數據依賴體現了屬性之間的對應關係,體現了屬性之間的相關性。


平凡函數依賴和非平凡的函數依賴


完全依賴和部分依賴


根據屬性數據依賴的情況,規範化理論採用範式來區分關係的規範化程度(1NF,2NF,3NF)


關係R屬於第三範式,則R的每一個非主屬性既不部分依賴於候選碼也不傳遞函數依賴與候選碼


DBMS常用的存取方法:
索引方法,主要是B+樹索引的方法
聚簇方法
HASH方法


聚簇:
爲了提高某個屬性(屬性組)的查詢速度,把這個或這些屬性(稱爲聚簇碼)上具有相同值的元組集中存放在連續的物理塊稱爲聚簇。


聚簇的作用
大大提高按聚簇屬性進行查詢的效率
節省存儲空間


聚簇的侷限性
聚簇只能提高某些特定應用的性能
家裏與維護聚簇的開銷相當大


即適用於單個關係獨立的聚簇,也適用於多個關係組合聚簇


數據庫試運行也稱聯合調試,其主要的工作包括
1.功能測試:實際運行應用程序,執行對數據庫的各種操作,測試應用程序的各種功能。
2.性能測試:測量系統的性能指標,分析是否符合設計目標




數據庫的維護:
1.數據庫的轉儲和恢復
2.數據庫的安全性,完整性控制
3.數據庫性能的監督,分析和改進
4.數據庫的重組織和重構造


事務是用戶定義的一個數據庫操作序列,這些操作要麼全做,要麼全不做,是一個不可分的工作單元


事務是恢復和併發控制的基本單位


事務的特性:
ACID
原子性 Atomicity
一致性 Consistency
隔離性 Isolation
持續性 Durability
原子性:事務是數據庫的邏輯工作單元
事務中包括的諸操作要麼都做,要麼都不做
一致性:事務執行的結構必須是使數據庫從一個一致性狀態變到另一個一致性狀態
一致性狀態:數據庫中只包含成功事務提交的結果
不一致狀態:數據庫中只包含失敗事務的結果
隔離性:對於併發執行而言
一個事務的執行不能被其他事務干擾
一個事務內部的操作及使用的數據庫對其他的併發事務是隔離的
併發執行的各個事務之間不能互相干擾
持續性也稱永久性
一個事務一旦提交,它對數據庫中的數據的改變就應該數永久的。
接下來的其他操作或故障不應該對其執行結果有任何影響


併發操作的潛在的不一致性
丟失修改
不可重複讀
讀“髒”數據


封鎖
排他鎖
共享鎖


封鎖協議
1級封鎖協議
事務在修改數據R之前必須先對其加X鎖,值到事務結束才釋放
正常結束(COMMIT)
非正常結束(ROLLBACK)
1級封鎖協議可防止丟失修改


封鎖粒度
封鎖對象:邏輯單元和物理單元
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章