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