1. 程式人生 > >資料庫概論學習筆記 其五(資料庫完整性)

資料庫概論學習筆記 其五(資料庫完整性)

第五章  資料庫完整性

資料庫的完整性:

    資料的正確性:

        是指資料是符合現實世界語義,反映了當前實際狀況的

    資料的相容性:

        是指資料庫同一物件在不同關係表中的資料是符合邏輯的

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)         );