緒論部分
1、數據庫的特點:
數據的結構化;高共享,低冗餘和大容量;可靠性高;安全;數據獨立;
2、三層模式結構:
內模式,也稱物理模式,它描述了數據存儲的物理結構和組織方式,是數據在數據庫內部的表示方式。
邏輯模式:描述數據庫中全體數據的邏輯結構,是所有用戶的公共數據視圖。
外模式:也稱子模式,它描述了一個數據庫用戶所能看到的局部數據的邏輯結構。通常是邏輯模式的一個子集。
3、兩層映像:
邏輯模式和物理模式映像,它定義了邏輯模式與存儲結構之間的對應關係,例如記錄和列是如何在磁盤上表示的。
外模式和邏輯模式映像,定義了外模式和邏輯模式之間的對應關係,用戶在操作時對外模式的訪問自動轉化爲對邏輯模式的訪問。
關係數據模型
1、元組:就是數據庫中一行
域:就是數據庫中的一列。
屬性:數據庫每個列的名字。
超鍵:若關係中某些屬性組合起來能夠唯一確定關係中的一個元組,則稱該屬性集合爲關係的一個超鍵,通俗的解釋就是:屬性結合能夠確定數據庫的一行,即是超鍵。一個關係至少有一個超鍵即所有屬性的集合。
候選鍵:特殊的超鍵,它的真子集都不構成超鍵,即稱作候選鍵,就是把候選鍵給拆了,它的真子集不能確定一個元組。一個關係至少有一個候選鍵。
主鍵:從關係的候選鍵中挑選一個作爲關係的主鍵,鍵包含的屬性爲主屬性。在關係的定義中,主屬性用下劃線表示,這個在E-R圖轉換爲關係模式不要忘記了。
2、關係的性質
列是同質的;列只能取原子值;不能有相同的元組;行的順序無關。
3、實體完整性
實體完整性要求對於任何一個關係,的構成主鍵的屬性值惟一併且不能爲空。
4、參照完整性
要求一個關係含有外鍵,則構成外鍵的屬性值要麼指向被引用表的某一個主鍵的值,要麼全部爲空。
5、關係代數
投影:就是我們通常的進行select操作時需要選擇的列。
選擇:就是我們做選擇等操作的where的條件
重命名:這個就相當於我們平時的as操作
連接:自然連接,先進行笛卡爾積然後再根據連接條件進行選擇
左外連接:左外連接不僅包含自然連接的結果,而且左邊關係中存在的屬性而右邊不存在的屬性也被包含進來。
右外連接:右外連接不僅包含自然連接的結果,而且右邊關係中存在的屬性而←邊不存在的屬性也被包含進來。
全外連接:全外連接是左外連接和右外連接的並集。
關係數據庫語言
1、數據定義語言DDL
create table, drop table, create view, create index
建表舉例:
create table branch
(branch-name char(15),
branch-city char(30),
assets integer,
employee-number smallint,
primary key (branch-name), // 多個主鍵中間用,分隔
check (assets >= 0)) // 約束條件
create table account
(account-number char(10) primary key, // 主鍵
branch-name char(15) not null, // 非空的約束
balance float,
type char(8),
foreign key (branch-name) references branch, // 外鍵的引用
check (type in (‘Saving’, ‘Checking’ )) // 約束
表結構修改舉例:
Alter table book add pos varchar(20) // book表新增一列 pos
Alter table book alter title varchar(200) // 修改book表的title列的長度爲200個字符
Alter table book add constraint c1 check (year > 2000) // 新增約束 校驗year是否大於2000
建立索引:
Creat index idx_book on book( title desc) // 給book表的title字段建立索引 倒序方式
建立視圖:
create view branch-total-loan (branch-name, total-loan) as
select branch-name, sum(amount)
from loan
group by branch-name
視圖的作用:
視圖能夠簡化用戶的操作
視圖能使用戶以多種角度看待同一數據
提供了邏輯獨立性
對機密數據提供安全保護
2、數據操縱語言DML
select, insert, update, delete 注意集合操作的使用 尤其是題目中說最大 最小 某一的時候
例子1
找出所有的支行名稱,這些分支點的資產大於某個在Brooklyn 城市的支行的資產,顯示結果以支行名稱的升序排列
表:branch (branch-name, branch-city, assets)
方法一:select distinct T.branch-name
from branch as T, branch as S
where T.assets > S.assets and S.branch-city = ‘Brooklyn’
order by T.branch-name
方法二:select branch-name from branch
where assets > some (select assets from branch
where branch-city = ‘Brooklyn’)
order by branch-name
例子2
找出所有資產大於平均資產的支行名稱
select branch-name
from branch
where assets > (select avg(assets) from branch)
例子3:
找出至少有5個資產大於100萬分支點的城市
select branch-city
from branch
where assets >1000000
group by branch-city
having count(branch-name)>=5
例子4:
刪除所有Brooklyn城市的帳號
account (account-number, branch-name, balance)
branch (branch-name, branch-city, assets)
delete from account
where branch-name in (select branch-name
from branch
where branch-city=‘Brooklyn’)
例子5:
給所有餘額大於平均餘額的帳號增加5%的利息
account (account-number, branch-name, balance)
update account
set balance = balance *1.05
where balance > (select avg(balance) from account)
例子6
設銷售數據模型如下:
廠家 S (SNO,SNAME,CITY )
產品 P (PNO,PNAME,COLOR,WEIGHT)
工程 J (JNO,JNAME,CITY)
銷售 SPJ (SNO,PNO,JNO,QTY)
1) 用SQL完成查詢:與“長風”在同一城市的廠家名;
Select sname from S where city = (select city form s where sname= '長風')
2)用SQL完成查詢:至少使用P1,P2兩種產品的工程名
Select pname from p
Where pno in (select pno from p where pname = 'P1')
And pno in (select pno from p where pname = 'P2')
3) 設有職工基本表:EMP(ENO,ENAME,AGE,SEX,SALARY),其屬性分別表示職工號、姓名、年齡、性別、工資。爲每個工資低於1000元的女職工加薪200元,試寫出這個操作的SQL語句
Update EMP set salary = salary + 300
Where sex = '女' and salary < 1000
4) 設有職工基本表:EMP(ENO,ENAME,AGE,SEX,SALARY,DNO),其屬性分別表示職工號、姓名、年齡、性別、工資,所在車間的編號。試寫一個斷言(斷言名爲ASSE4),要求每個車間女職工人數不少於20人。
create assertion ASSE4 check
(20 >= ALL( select count(eno) from EMP where sex = '女'
Group by DNO))
例子7:
PPT 42頁上的例題,我覺得這個題最像考試題,不過題目的答案好像不是很準確
3、嵌入式sql如何與宿主語言通信?
一種是使用SQLCA和SQLDA結構,其中最常用的是使用SQLCA的sqlcode變量。
另一種是通過主變量的方式來實現宿主語言和sql的數據流動。
關係規範化
1、不好的數據庫模式設計存在的問題
信息冗餘和更新複雜
插入異常
刪除異常
2、1NF:數據庫中每一列都是不可再分的數據項,同一列中不能有多個值,不能說以列中是姓名和年齡。
2NF:要求實體屬性完全依賴於關鍵字,如果存在非主屬性部分依賴於關鍵字,應該把這個非主屬性和所依賴的關鍵字單獨出來,形成一個新的關係。比如A,B是關鍵字,然而
B-->C,即C部分函數依賴了B,存在部分函數依賴。
3NF:不存在傳遞函數依賴的2NF就是3NF,所謂傳遞依賴:A-->B, B-->C既不是。
BCNF:如果關係模式R(U,F)的所有屬性(包括主屬性和非主屬性)都不傳遞依賴於R的任何候選關鍵字,那麼稱關係R是屬於BCNF的 如果存在非主屬性決定主屬性則不是BCNF,比如:ABC是關鍵字, D-->A 則不是BCNF,還有這樣的情況也不是BCNF,
A-->B ,B-->A。
這塊多做幾個題目應該就ok了。
數據庫保護
1、死鎖的處理方法
1)死鎖預防
一次封鎖法
順序封鎖法
2)死鎖檢測與恢復
超時法
等待圖法,該圖由G=(V,E)組成,頂點集V由系統中所有的事務組成,邊集E的每一個元素是一個有序對Ti ®Tj ,表示事務Ti在等待Tj釋放所需的鎖。當且僅當等待圖中包含環時,系統中存在死鎖。
3)死鎖恢復
選擇犧牲者
回滾
防止餓死
2、數據庫的故障類型
1)事務故障
邏輯錯誤
系統錯誤
2)系統崩潰:如突然停電、硬件故障、軟件錯誤等引起系統崩潰
故障停止假設:當系統崩潰時非易失存儲器內容不被破壞
3)介質故障