資料庫概論學習筆記 其五(資料庫完整性)
第五章 資料庫完整性
資料庫的完整性:
資料的正確性:
是指資料是符合現實世界語義,反映了當前實際狀況的
資料的相容性:
是指資料庫同一物件在不同關係表中的資料是符合邏輯的
5.1 實體完整性
實體完整性定義
CREATE TABLE中用PRIMARY KEY定義
將Student表中的Sno屬性定義為碼
(1)在列級定義主碼
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20));
(2)在表級定義主碼
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno));
將SC表中的Sno,Cno屬性組定義為碼
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno,Cno) /*只能在表級定義主碼*/
);
實體完整性檢查和違約處理
檢查主碼值是否唯一,如果不唯一則拒絕插入或修改
檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改
5.2 參照完整性
參照完整性定義
在CREATE TABLE中用FOREIGN KEY短語定義哪些列為外碼
用REFERENCES短語指明這些外碼參照哪些表的主碼
定義SC中的參照完整性
CREATE TABLE SC
( Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno), /*在表級定義實體完整性*/
FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表級定義參照完整性*/
FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表級定義參照完整性*/
);
參照完整性檢查和違約處理
SC表中增加一個元組,該元組的Sno屬性的值在表Student中找不到一個元組,其Sno屬性的值與之相等。
修改SC表中的一個元組,修改後該元組的Sno屬性的值在表Student中找不到一個元組,其Sno屬性的值與之相等。
從Student表中刪除一個元組,造成SC表中某些元組的Sno屬性的值在表Student中找不到一個元組,其Sno屬性的值與之相等。
修改Student表中一個元組的Sno屬性,造成SC表中某些元組的Sno屬性的值在表Student中找不到一個元組,其Sno屬性的值與之相等 。
5.3 使用者定義的完整性
屬性上的約束條件
CREATE TABLE時定義屬性上的約束條件
列值非空(NOT NULL)
列值唯一(UNIQUE)
檢查列值是否滿足一個條件表示式(CHECK)
元組上的約束條件
在CREATE TABLE時可以用CHECK短語定義元組上的約束條件,即元組級的限制
5.4 完整性約束命名子句
建立學生登記表Student,要求學號在90000~99999之間,姓名不能取空值,年齡小於30,性別只能是“男”或“女”。
CREATE TABLE Student
( Sno NUMERIC(6)
CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
Sname CHAR(20)
CONSTRAINT C2 NOT NULL,
Sage NUMERIC(3)
CONSTRAINT C3 CHECK (Sage < 30),
Ssex CHAR(2)
CONSTRAINT C4 CHECK (Ssex IN ( ‘男’,'女')),
CONSTRAINT StudentKey PRIMARY KEY(Sno) );