實體-聯(lián)系模型
基本概念
- 實體和屬性
實體是客觀存在并且可以相互區(qū)分的任何事物
屬性是實體所代表事物具有的某種特性
每個屬性都有一定的取值范圍力麸,成為該屬性的值域
- 實體集和碼
實體集是具有相同屬性的實體的集合
實體的值是該實體諸屬性值的列表
實體集的值是該實體集中所有實體值的集合
其值可以唯一確定實體集中每個實體的屬性集稱為該實體集的超碼
那些其真子集都不是超碼的極小超碼稱為候選碼
主碼是數(shù)據(jù)庫設(shè)計者選中的,是用來區(qū)分同一實體集中不同實體的候選碼
- 屬性分類
屬性大部分都是簡單的
不能劃分成更小的結(jié)構(gòu)
育韩、單值的只能取單個值
克蚂、基本的不能由其他屬性推導(dǎo)出
復(fù)合屬性與簡單屬性對應(yīng)
是可以劃分成更小部分的屬性
多值屬性對應(yīng)單值屬性
是特定的實體在該屬性上可以取多個值的屬性
派生屬性對應(yīng)基本屬性
的值可以從其他相關(guān)屬性或?qū)嶓w計算得到,因此又稱為計算屬性
- 聯(lián)系與聯(lián)系集
聯(lián)系是多個實體之間的相互關(guān)系
聯(lián)系集是相同的類型聯(lián)系的集合
實體在聯(lián)系中的作用稱為實體的角色
- 聯(lián)系的類型
聯(lián)系的類型又稱為聯(lián)系的函數(shù)性或映射函數(shù)
一對一聯(lián)系E2與E1中的每個實體最多與另一個實體集中的一個相互關(guān)聯(lián)
一對多聯(lián)系(1:n聯(lián)系)
多對一聯(lián)系(n:1聯(lián)系)
多對多聯(lián)系(m:n聯(lián)系)
- 實體集與參與類型
如果實體集中的每個實體都必須參與聯(lián)系R筋讨,則稱實體集對聯(lián)系R的參與是強制的埃叭,或全部參與,否則是隨意的悉罕,或部分參與
- 聯(lián)系的屬性
聯(lián)系也可以包含屬性赤屋,這種情況多出現(xiàn)在多對多聯(lián)系中
實體聯(lián)系圖
實體-聯(lián)系模型用
實體-聯(lián)系圖(E-R圖)對現(xiàn)實世界建立概念模型
- E-R圖包含如下成分
- 橢圓表示屬性,屬性寫在框內(nèi)
- 矩形表示實體集蛮粮,實體集名寫在框內(nèi)
- 菱形框表示聯(lián)系益缎,聯(lián)系名寫在框內(nèi)
弱實體集
一般地,如果一個實體集的任何屬性集都不足以形成該實體集的碼然想,則稱該實體集為弱實體集,相反的欣范,存在碼的實體集稱為強實體集
每個弱實體必須存在依賴于
一個強實體
弱實體集必須與另一個稱為標(biāo)識實體集或屬主實體集的強實體集相關(guān)聯(lián)才有意義
將弱實體集與其標(biāo)識實體集相關(guān)聯(lián)的聯(lián)系稱為標(biāo)識性聯(lián)系
分辨符
变泄、部分碼
關(guān)系數(shù)據(jù)模型
關(guān)系數(shù)據(jù)庫結(jié)構(gòu)
- 關(guān)系
域是具有相同類型的值的集合,域中的元素個數(shù)為該域的基數(shù)恼琼,記作
|D|
n個域的笛卡爾集的每個元素稱為一個n-元組(簡稱元組)叉讥,第i個元素為第i個分量
基數(shù)為|D1| * |D2| * ... * |Dn|
域上的關(guān)系是笛卡爾積的任意字集
在關(guān)系數(shù)據(jù)庫中讥邻,關(guān)系通常用關(guān)系名命名,并被看作一個二維表
表的每一列對應(yīng)于一個分量。列通常是命名的突琳,稱為屬性
表的第一行是表頭,給出各列的屬性名
關(guān)系的每一個屬性都必須是原子的
- 關(guān)系模式
粗略的說霎迫,關(guān)系模式概念對應(yīng)于程序設(shè)計語言中的類型概念爽室,它是型,定義關(guān)系的結(jié)構(gòu)
我們把關(guān)系模式簡記為R(A1,A2,...,An)
R是關(guān)系名已维,A是屬性名
關(guān)系的型用關(guān)系模式刻畫行嗤,關(guān)系的值即關(guān)系在某一時刻的快照,又稱為關(guān)系實例
關(guān)系數(shù)據(jù)庫模式由若干域的定義和一組定義在這些域上的關(guān)系模式組成
關(guān)系數(shù)據(jù)庫的值就是這些關(guān)系模式對應(yīng)的關(guān)系在某一時刻的值
- 關(guān)系的碼
主碼用于表示由多個碼中選出的作為唯一識別關(guān)系元組的碼垛耳,而所有的碼又稱候選碼栅屏。碼中的屬性稱為主屬性飘千,不在任何碼中的屬性稱為非主屬性
從E-R數(shù)據(jù)庫到關(guān)系模型
基本E-R圖的轉(zhuǎn)換
- 屬性處理
- 派生屬性:
忽略
- 復(fù)合屬性:
忽略復(fù)合屬性本省,直接考慮它的成分屬性
- 多值屬性:
如果多值屬性m是實體集E的屬性栈雳,k是E的主碼护奈,則關(guān)系Rm的屬性由m和K組成
多主碼時由m和K1、K2...Kn組成
- 將基本E-R圖轉(zhuǎn)換成關(guān)系模式
- 每個強實體集用一個關(guān)系表示
- 每個弱實體集用一個關(guān)系表示
- 每個集合用一個關(guān)系表示哥纫,但是若實體集于其標(biāo)識實體集之間的存在依賴聯(lián)系將被忽略
- 如果兩個關(guān)系具有相同的碼逆济,則可以合并它們
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL
- SQL語言的特點
- 集多數(shù)數(shù)據(jù)庫語言于一身
- 高度非過程化
- 面向集合的操作方式
- 一種語法兩種使用方式
- 功能強大,語言簡潔
數(shù)據(jù)定義
- SQl的數(shù)據(jù)類型
CHAR(n) VAECHAR(n) BIT(n) BIT VARYING(n) INT SMALLINT NUMERIC(p,d) DEC(p,d) FLOAT(n) REAL DATA TIME
- 定義磺箕、修改和刪除基本表
1.創(chuàng)建基本表
CEARTE TABLE Teachers
(Tno CHAR(7) PRIMARY KEY,
Tname CHAR(10) NOT NULL,
Sex CHAR(2) CHECK (Sex='男' or Sex='女'),
Birthday DATE,
Title CHAR(6),
Dno CHAR(4),
FOREIGN KEY(Dno) REFERENCES Departments(Dno));
2.修改基本表
使用 ALTER TABLE語句修改基本表
向基本表中添加列:
ALTER TABLE <> ADD []<>
對于已存在的列修改缺省值:
ALTER TABLE Student ALTER Sex DEFAULT '女';
ALTER TABLE Student ALTER Sex DROP DEFAULT;
刪除已存在的列
ALTER TABLE Courses DROP Pno
3.刪除基本表
DROP TABLE <表名> {CASCADE|RESTRICT}
- 建立和刪除索引
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
DROP INDEX <索引名>
- 模式定義和刪除
CREATE SCHEMA Supply_schema AUTHORRIZATION wangqiang;
DROP SCHEMA <模式名> CASCADE|RESTRICT
數(shù)據(jù)查詢
- select語句的一般形式
SELECT Cno,Cname,Period,Credit FROM Courses;
SELECT * FROM Courses;
SELECT 2016-year(Birthday) AS Age FROM Students;
SELECT DISTINCT 2016-year(Birthday) Age FROM Students;
SELECT Tname,Sex FROM Teachers WHERE Grade<60;
SELECT DISTINCT Sno FROM SC WHERE Grade<60;
SELECT Sname, Speciality FROM Students WHERE year(Birthday) BETWEEN 187 AND 1990;
SELECT Sname, Speciality FROM Students WHERE year(Birthday) NOT BETWEEN 187 AND 1990;
SELECT Sno,Sname FROM WHERE Speciality IN ('軟件工程','計算機科學(xué)與技術(shù)');
SELECT Sno,Sname FROM WHERE Speciality NOT IN ('軟件工程','計算機科學(xué)與技術(shù)');
SELECT Cname FROM Courses WHERE Cname LIKE '數(shù)據(jù)%'
SELECT Sno,Sname FROM Students WHERE LIKE '李__'
SELECT * FROM Courses WHERE Cname LIKE 'C_%' ESCAPE '';
ESCAPE定義\為轉(zhuǎn)義字符
SELECT * FROM SC WHERE Grade IS NULL;
- 排序和分組
將查詢結(jié)果排序:
ORDER BY <排序列> [ASC|DESC]{,<排序列>[ASC|DESC]}
- 聚集函數(shù)
SELECT COUNT(*) FROM SC WHERE Cno='CS302';
SELECT MIN(Grade),AVG(Grade),MAX(Grade) FROM SC WHERE Cno='CS302';
- 分組
SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;
SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>85;
- 連接查詢
SELECT Cname,Grade FROM SC,Course WHERE SC.Cno=Courses.Cno AND Sno = '200605098';
SELECT Cname,Grade FROM SC,Course WHERE SC.Cno=Courses.Cno AND Cno='CS202' AND Grade>90;
SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Students.Sno=SC.Sno AND SC.Cno=Course.Cno;
- 嵌套查詢
IN引出的子查詢
SELECT Sno,Sname FROM Students WHERE Sex = '女' AND Speciality IN (
SELECT Speciality FROM Students WHERE Sname ='王麗麗'
);集合的比較引出的子查詢
SELECT Sno,Sname,Speciality,Birthday FROM Students WHERE Speciality <> '軟件工程' AND Birthday > ALL(
SELECT Birthday FROM Students WHERE Speciality = '軟件工程'
);存在量詞引出的子查詢
SELECT Sno,Sname FROM Students S WHERE EXISTS (
SELECT * FROM SC WHERE Sno=S.Sno AND Cno = 'CS403');
數(shù)據(jù)更新
- 插入單個元組
INSERT INTO Students VALUES(......);
INSERT INTO Students(......) VALUES(......);
- 插入查詢結(jié)果
INSERT INTO Cardinf(Card-no,Name,Balance) SELECT Tno,Tname,100.00 FROM Teachers WHERE Dno ='IE';
- 刪除
DELETE FROM Students WHERE Sno ='98757';
DELETE FROM Students;
刪除所有記錄
DELETE FROM SC WHERE Sno IN (
SELECT Sno FROM Students WHERE Speciality = '計算機軟件于理論');
- 修改
UPDATE Teachers SET Title = '副教授' WHERE Tno='B050041';
UPDATE SC SET Grade = Grade + 5 WHERE Grade < 60 AND Cno IN (
SELECT Cno FROM Courses WHERE Cname='軟件工程');
視圖
定義視圖和刪除視圖
- 定義視圖
CREATE VIEW SE_Students AS SELECT Sno,Sname,Sex,Birthday,Dno FROM Students WHERE Speciality = '軟件工程' WITH CHECK OPTION;
表示該視圖是可更新的
CREATE VIEW Student_Grade(Sno,Sname,Cname,Grade) AS SELECT S.Sno,Sname,Cname,Grade FROM Students S,SC,Courses C WHERE S.Sno=C.Sno AND C.Cno= SC.cno;
- 刪除視圖
DROP VIEW <視圖名> [CASCADE|RESTRICT]
基于視圖的查詢
視圖是命名的導(dǎo)出表奖慌,從用戶角度講,查詢時使用視圖與使用基本表并無區(qū)別
基于視圖的更新
所有視圖都是直接或間接由基本表定義的松靡〖蛏基于視圖的更新最終要轉(zhuǎn)換成對定義視圖的基本表的更新。并不是所有視圖都可以更新雕欺。(●'?'●)
視圖的作用
- 使用視圖可以使一些查詢表達更加簡潔
- 視圖提供了一定程度的邏輯獨立性
- 視圖的安全保護作用
- 視圖使得用戶能夠以不同角度看待相同的數(shù)據(jù)
完整性與安全性
完整性概述
數(shù)據(jù)庫的完整性是指數(shù)據(jù)庫中的數(shù)據(jù)的正確性岛马、一致性和相容性。數(shù)據(jù)庫中的數(shù)據(jù)要成為有意義的信息屠列,必須滿足一定的語義約束條件啦逆。
- 約束分類
- 類型(域)約束:說明給定類型的合法取值
- 屬性約束:說明屬性的合法值
- 關(guān)系約束:說明關(guān)系的合法取值
- 數(shù)據(jù)庫約束:說明數(shù)據(jù)庫的合法取值,通常涉及多個關(guān)系
實體完整性是一種關(guān)系約束笛洛,參照完整性是一種數(shù)據(jù)庫約束夏志,而用戶定義的完整性可以是上述四種約束的任何一種
靜態(tài)約束是關(guān)于數(shù)據(jù)庫正確狀態(tài)的約束
動態(tài)約束是數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)移到另一種狀態(tài)的約束
- DBMS對完整性的支持
- 說明和定義完整性約束條件的方法
- 完整性檢查機制
- 違約處理
實體完整性和參照完整性
實體完整性
- 每個關(guān)系應(yīng)該有一個主碼,每個元組的主碼值唯一確定該元組
- 主碼的任何屬性都不能取空值
參照完整性
1.參照完整性與E-R模型
如果是由E-R圖得到的苛让,則由聯(lián)系集轉(zhuǎn)換得到的每一個關(guān)系都存在參照完整性
如果來源是弱實體集沟蔑,包含外碼,外碼不能取空值
2.違反參照完整性的更新
3.保證參照完整性的措施
拒絕
級連
SQL中的參照完整性
SQL支持參照完整性狱杰。
用戶定義完整性
屬性約束
屬性上的約束是指屬性的取值必須來自其定義的值域
關(guān)系約束
關(guān)系約束說明關(guān)系的合法取值瘦材,常常涉及多個同一關(guān)系的多個屬性和/或多個屬性元組(否則可以看作屬性約束)
斷言與數(shù)據(jù)庫約束
斷言是一種命名約束,它表達了數(shù)據(jù)庫狀態(tài)必須滿足的邏輯條件仿畸。
觸發(fā)器
觸發(fā)器是特殊類型的儲存過程食棕,當(dāng)某個事件發(fā)生時它被自動執(zhí)行
- 指明什么事件發(fā)生和滿足什么條件執(zhí)行觸發(fā)器
- 指明觸發(fā)器執(zhí)行什么樣的動作
- SQL中的觸發(fā)器
CREATE TRIGGER OverdraftTrigger
AFTER UPDATE OF Balance ON Account
REFERENCING NEW ROW AS nrow
FOR EACH ROW
WHEN(nrow.balance<0)
BEGIN ATOMIC
INSERT INTO Loan VALUEA(......);
END
安全性概述
- 數(shù)據(jù)庫安全保護的多層面
- 物理層
- 人際層
- 網(wǎng)絡(luò)層
- 數(shù)據(jù)庫系統(tǒng)層
- 操作系統(tǒng)層
- 數(shù)據(jù)庫安全保護的任務(wù)
- 未經(jīng)授權(quán)讀區(qū)數(shù)據(jù)(竊取信息)
- 未經(jīng)授權(quán)修改數(shù)據(jù)
- 未經(jīng)授權(quán)刪除數(shù)據(jù)
保護數(shù)據(jù)設(shè)計以下幾個任務(wù)
- 防止對數(shù)據(jù)的未經(jīng)過授權(quán)的存取,確保敏感信息沒有被不“需要知道”這些信息的人訪問的到
- 防止未經(jīng)過授權(quán)的人員刪除和修改數(shù)據(jù)
- 監(jiān)視對數(shù)據(jù)的訪問和更改等使用情況
SQL的授權(quán)
授權(quán)與收回
- 授權(quán)語句
GRANT SELECT ON Students TO PUBLIC;
GRANT ALL PRIVILEGES ON Students TO U1;
GRANT ALL PRIVILEGES ON Students,Courses TO U1,U2 WITH GRANT OPTION;
GRANT INSERT,UPDATE(Grade) ON TABLE SC TO U3;
- 收回權(quán)限
REVOKE <權(quán)限列表> ON <對象名> FROM <用戶/角色列表> {CASCADE|RESTRICT}
SQL對角色的支持
- 創(chuàng)建角色和角色授權(quán)
CREATE ROLE <角色名>
GRANT ALL PRIVILEGES ON Account,Loan,Depositor,Borrower TO Teller;
- 使用角色授權(quán)
GRANT <角色列表> TO <用戶/角色列表>
GRANT Manager TO niuxianghui WITH ADMIN OPTION;
- 收回授予角色的權(quán)限
可以像從用戶回收權(quán)限一樣错沽,使用REVOKE語句回收授予角色的授權(quán)
- 收回角色
REVOKE <角色列表> FROM <用戶/角色列表> {CASCADE|RESTRICT}
其他安全措施
- 審計技術(shù)
- 數(shù)據(jù)加密