實(shí)體-聯(lián)系模型
基本概念
實(shí)體是客觀存在并且可以相互區(qū)分的任何事物 屬性是實(shí)體所代表事物具有的某種特性 每個(gè)屬性都有一定的取值范圍,成為該屬性的值域
實(shí)體集是具有相同屬性的實(shí)體的集合 實(shí)體的值是該實(shí)體諸屬性值的列表 實(shí)體集的值是該實(shí)體集中所有實(shí)體值的集合 其值可以唯一確定實(shí)體集中每個(gè)實(shí)體的屬性集稱為該實(shí)體集的超碼 那些其真子集都不是超碼的極小超碼稱為候選碼 主碼是數(shù)據(jù)庫設(shè)計(jì)者選中的,是用來區(qū)分同一實(shí)體集中不同實(shí)體的候選碼
屬性大部分都是簡單的不能劃分成更小的結(jié)構(gòu) 、單值的只能取單個(gè)值 、基本的不能由其他屬性推導(dǎo)出 復(fù)合屬性與簡單屬性對(duì)應(yīng) 是可以劃分成更小部分的屬性 多值屬性對(duì)應(yīng)單值屬性 是特定的實(shí)體在該屬性上可以取多個(gè)值的屬性 派生屬性對(duì)應(yīng)基本屬性 的值可以從其他相關(guān)屬性或?qū)嶓w計(jì)算得到,因此又稱為計(jì)算屬性
聯(lián)系是多個(gè)實(shí)體之間的相互關(guān)系 聯(lián)系集是相同的類型聯(lián)系的集合 實(shí)體在聯(lián)系中的作用稱為實(shí)體的角色
聯(lián)系的類型又稱為聯(lián)系的函數(shù)性或映射函數(shù) 一對(duì)一聯(lián)系E2與E1中的每個(gè)實(shí)體最多與另一個(gè)實(shí)體集中的一個(gè)相互關(guān)聯(lián) 一對(duì)多聯(lián)系(1:n聯(lián)系) 多對(duì)一聯(lián)系(n:1聯(lián)系) 多對(duì)多聯(lián)系(m:n聯(lián)系)
如果實(shí)體集中的每個(gè)實(shí)體都必須參與聯(lián)系R,則稱實(shí)體集對(duì)聯(lián)系R的參與是強(qiáng)制的,或全部參與,否則是隨意的,或部分參與
聯(lián)系也可以包含屬性,這種情況多出現(xiàn)在多對(duì)多聯(lián)系中
實(shí)體聯(lián)系圖
實(shí)體-聯(lián)系模型用 實(shí)體-聯(lián)系圖(E-R圖)對(duì)現(xiàn)實(shí)世界建立概念模型
-
E-R圖包含如下成分
-
橢圓表示屬性,屬性寫在框內(nèi)
- 矩形表示實(shí)體集,實(shí)體集名寫在框內(nèi)
- 菱形框表示聯(lián)系,聯(lián)系名寫在框內(nèi)
弱實(shí)體集
一般地,如果一個(gè)實(shí)體集的任何屬性集都不足以形成該實(shí)體集的碼,則稱該實(shí)體集為弱實(shí)體集,相反的,存在碼的實(shí)體集稱為強(qiáng)實(shí)體集 每個(gè)弱實(shí)體必須存在依賴于 一個(gè)強(qiáng)實(shí)體 弱實(shí)體集必須與另一個(gè)稱為標(biāo)識(shí)實(shí)體集或屬主實(shí)體集的強(qiáng)實(shí)體集相關(guān)聯(lián)才有意義 將弱實(shí)體集與其標(biāo)識(shí)實(shí)體集相關(guān)聯(lián)的聯(lián)系稱為標(biāo)識(shí)性聯(lián)系
分辨符 、部分碼
關(guān)系數(shù)據(jù)模型
關(guān)系數(shù)據(jù)庫結(jié)構(gòu)
域是具有相同類型的值的集合,域中的元素個(gè)數(shù)為該域的基數(shù),記作|D| n個(gè)域的笛卡爾集的每個(gè)元素稱為一個(gè)n-元組(簡稱元組),第i個(gè)元素為第i個(gè)分量 基數(shù)為|D1| |D2| ... |Dn| 域上的關(guān)系是笛卡爾積的任意字集 在關(guān)系數(shù)據(jù)庫中,關(guān)系通常用關(guān)系名命名,并被看作一個(gè)*二維表 表的每一列對(duì)應(yīng)于一個(gè)分量。列通常是命名的,稱為屬性 表的第一行是表頭,給出各列的屬性名 關(guān)系的每一個(gè)屬性都必須是原子的**
粗略的說,關(guān)系模式概念對(duì)應(yīng)于程序設(shè)計(jì)語言中的類型概念,它是型,定義關(guān)系的結(jié)構(gòu) 我們把關(guān)系模式簡記為R(A1,A2,...,An) R是關(guān)系名,A是屬性名 關(guān)系的型用關(guān)系模式刻畫,關(guān)系的值即關(guān)系在某一時(shí)刻的快照,又稱為關(guān)系實(shí)例 關(guān)系數(shù)據(jù)庫模式由若干域的定義和一組定義在這些域上的關(guān)系模式組成 關(guān)系數(shù)據(jù)庫的值就是這些關(guān)系模式對(duì)應(yīng)的關(guān)系在某一時(shí)刻的值
主碼用于表示由多個(gè)碼中選出的作為唯一識(shí)別關(guān)系元組的碼,而所有的碼又稱候選碼。碼中的屬性稱為主屬性,不在任何碼中的屬性稱為非主屬性
從E-R數(shù)據(jù)庫到關(guān)系模型
基本E-R圖的轉(zhuǎn)換
-
屬性處理
-
派生屬性:忽略
- 復(fù)合屬性:
忽略復(fù)合屬性本省,直接考慮它的成分屬性
- 多值屬性:
如果多值屬性m是實(shí)體集E的屬性,k是E的主碼,則關(guān)系Rm的屬性由m和K組成 多主碼時(shí)由m和K1、K2...Kn組成
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言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 []<> 對(duì)于已存在的列修改缺省值:
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 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 ('軟件工程','計(jì)算機(jī)科學(xué)與技術(shù)');
SELECT Sno,Sname FROM WHERE Speciality NOT IN ('軟件工程','計(jì)算機(jī)科學(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]}
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(......);
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 = '計(jì)算機(jī)軟件于理論');
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)出表,從用戶角度講,查詢時(shí)使用視圖與使用基本表并無區(qū)別
基于視圖的更新
所有視圖都是直接或間接由基本表定義的。基于視圖的更新最終要轉(zhuǎn)換成對(duì)定義視圖的基本表的更新。并不是所有視圖都可以更新。(●'?'●)
視圖的作用
- 使用視圖可以使一些查詢表達(dá)更加簡潔
- 視圖提供了一定程度的邏輯獨(dú)立性
- 視圖的安全保護(hù)作用
- 視圖使得用戶能夠以不同角度看待相同的數(shù)據(jù)
完整性與安全性
完整性概述
數(shù)據(jù)庫的完整性是指數(shù)據(jù)庫中的數(shù)據(jù)的正確性、一致性和相容性。數(shù)據(jù)庫中的數(shù)據(jù)要成為有意義的信息,必須滿足一定的語義約束條件。
- 類型(域)約束:說明給定類型的合法取值
- 屬性約束:說明屬性的合法值
- 關(guān)系約束:說明關(guān)系的合法取值
- 數(shù)據(jù)庫約束:說明數(shù)據(jù)庫的合法取值,通常涉及多個(gè)關(guān)系
實(shí)體完整性是一種關(guān)系約束,參照完整性是一種數(shù)據(jù)庫約束,而用戶定義的完整性可以是上述四種約束的任何一種
靜態(tài)約束是關(guān)于數(shù)據(jù)庫正確狀態(tài)的約束 動(dòng)態(tài)約束是數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)移到另一種狀態(tài)的約束
-
DBMS對(duì)完整性的支持
-
說明和定義完整性約束條件的方法
- 完整性檢查機(jī)制
- 違約處理
實(shí)體完整性和參照完整性
實(shí)體完整性
- 每個(gè)關(guān)系應(yīng)該有一個(gè)主碼,每個(gè)元組的主碼值唯一確定該元組
- 主碼的任何屬性都不能取空值
參照完整性
1.參照完整性與E-R模型
如果是由E-R圖得到的,則由聯(lián)系集轉(zhuǎn)換得到的每一個(gè)關(guān)系都存在參照完整性 如果來源是弱實(shí)體集,包含外碼,外碼不能取空值
2.違反參照完整性的更新 3.保證參照完整性的措施
拒絕 級(jí)連
SQL中的參照完整性
SQL支持參照完整性。
用戶定義完整性
屬性約束
屬性上的約束是指屬性的取值必須來自其定義的值域
關(guān)系約束
關(guān)系約束說明關(guān)系的合法取值,常常涉及多個(gè)同一關(guān)系的多個(gè)屬性和/或多個(gè)屬性元組(否則可以看作屬性約束)
斷言與數(shù)據(jù)庫約束
斷言是一種命名約束,它表達(dá)了數(shù)據(jù)庫狀態(tài)必須滿足的邏輯條件。
觸發(fā)器
觸發(fā)器是特殊類型的儲(chǔ)存過程,當(dāng)某個(gè)事件發(fā)生時(shí)它被自動(dòng)執(zhí)行
- 指明什么事件發(fā)生和滿足什么條件執(zhí)行觸發(fā)器
-
指明觸發(fā)器執(zhí)行什么樣的動(dòng)作
-
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
安全性概述
保護(hù)數(shù)據(jù)設(shè)計(jì)以下幾個(gè)任務(wù)
- 防止對(duì)數(shù)據(jù)的未經(jīng)過授權(quán)的存取,確保敏感信息沒有被不“需要知道”這些信息的人訪問的到
- 防止未經(jīng)過授權(quán)的人員刪除和修改數(shù)據(jù)
- 監(jiān)視對(duì)數(shù)據(jù)的訪問和更改等使用情況
SQL的授權(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;
REVOKE <權(quán)限列表> ON <對(duì)象名> FROM <用戶/角色列表> {CASCADE|RESTRICT}
SQL對(duì)角色的支持
CREATE ROLE <角色名>
GRANT ALL PRIVILEGES ON Account,Loan,Depositor,Borrower TO Teller;
GRANT <角色列表> TO <用戶/角色列表>
GRANT Manager TO niuxianghui WITH ADMIN OPTION;
可以像從用戶回收權(quán)限一樣,使用REVOKE語句回收授予角色的授權(quán)
REVOKE <角色列表> FROM <用戶/角色列表> {CASCADE|RESTRICT}
其他安全措施
- 審計(jì)技術(shù)
- 數(shù)據(jù)加密
關(guān)系數(shù)據(jù)庫的設(shè)計(jì)理論
|