資料庫,資料庫學習

來源:互聯網
上載者:User

資料庫,資料庫學習
資料庫的完整性

資料的正確性和相容性

資料的完整性和安全性是兩個不同概念
資料的完整性
防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料
防範對象:不合語義的、不正確的資料
資料的安全性
保護資料庫防止惡意的破壞和非法的存取
防範對象:非法使用者和非法操作
為維護資料庫的完整性,DBMS必須:
1.提供定義完整性條件約束條件的機制
2.提供完整性檢查的方法
3.違約處理

實體完整性

實體完整性定義
關聯式模式的實體完整性
CREATE TABLE中用PRIMARY KEY定義
單屬性構成的碼有兩種說明方法
定義為資料行層級條件約束條件
定義為表級約束條件
對多個屬性構成的碼只有一種說明方法
定義為表級約束條件

[例1]  將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)      ); 
[例2]將SC表中的Sno,Cno屬性群組定義為碼      CREATE TABLE SC           (Sno   CHAR(9)  NOT NULL,             Cno  CHAR(4)  NOT NULL,              Grade    SMALLINT,            PRIMARY KEY (Sno,Cno)     /*只能在表級定義主碼*/          ); 

實體完整性檢查和違約處理
插入或對主碼列進行更新操作時,RDBMS按照實體完整性規則自動進行檢查。包括:
1. 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改
2. 檢查主碼的各個屬性是否為空白,只要有一個為空白就拒絕插入或修改

參照完整性

參照完整性定義
關聯式模式的參照完整性定義
在CREATE TABLE中用FOREIGN KEY短語定義哪些列為外碼
用REFERENCES短語指明這些外碼參照哪些表的主碼

例如,關係SC中一個元組表示一個學生選修的某門課程的成績,(Sno,Cno)是主碼。Sno,Cno分別參照引用Student表的主碼和Course表的主碼 [例3]  定義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)              /*在表級定義參照完整性*/      );

參照完整性檢查和違約處理
參照完整性違約處理

[例4]  顯式說明參照完整性的違約處理樣本    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)         ON DELETE CASCADE     /*串聯刪除SC表中相應的元組*/                ON UPDATE CASCADE, /*串聯更新SC表中相應的元組*/         FOREIGN KEY (Cno) REFERENCES Course(Cno)                                      ON DELETE NO ACTION                 /*當刪除course 表中的元組造成了與SC表不一致時拒絕刪除*/               ON UPDATE CASCADE           /*當更新course表中的cno時,串聯更新SC表中相應的元組*/        );

使用者定義的完整性就是針對某一具體應用的資料必須滿足的語義要求
RDBMS提供,而不必由應用程式承擔

屬性上的約束條件的定義
CREATE TABLE時定義列值非空(NOT NULL)列值唯一(UNIQUE)檢查列值是否滿足一個布林運算式(CHECK)
1.不允許取空值 [例5]  在定義SC表時,說明Sno、Cno、Grade屬性不允許取空值。    CREATE TABLE SC      (Sno  CHAR(9)  NOT NULL,            Cno  CHAR(4)  NOT NULL,             Grade  SMALLINT NOT NULL,           PRIMARY KEY (Sno, Cno),            /* 如果在表級定義實體完整性,隱含了Sno,Cno不允許取空值,則在列級不允許取空值的定義就不必寫了 * /        ); 
2.列值唯一 [例6]  建立部門表DEPT,要求部門名稱Dname列取值唯一,部門編號Deptno列為主碼    CREATE TABLE DEPT        (Deptno  NUMERIC(2),          Dname  CHAR(9)  UNIQUE,/*要求Dname列值唯一*/          Location  CHAR(10),          PRIMARY KEY (Deptno)       );
3. 用CHECK短語指定列值應該滿足的條件[例7]  Student表的Ssex只允許取“男”或“女”。    CREATE TABLE Student        (Sno  CHAR(9) PRIMARY KEY,          Sname CHAR(8) NOT NULL,                               Ssex  CHAR(2)  CHECK (Ssex IN (‘男’,‘女’) ) ,                              /*性別屬性Ssex只允許取'男'或'女' */          Sage  SMALLINT,          Sdept  CHAR(20)        );
屬性上的約束條件檢查和違約處理

插入元組或修改屬性的值時,RDBMS檢查屬性上的約束條件是否被滿足
如果不滿足則操作被拒絕執行

元組上的約束條件的定義

在CREATE TABLE時可以用CHECK短語定義元組上的約束條件,即元組級的限制
同屬性值限制相比,元組級的限制可以設定不同屬性之間的取值的相互約束條件

[例9]  當學生的性別是男時,其名字不能以Ms.打頭。    CREATE TABLE Student         (Sno    CHAR(9),           Sname  CHAR(8) NOT NULL,          Ssex    CHAR(2),          Sage   SMALLINT,          Sdept  CHAR(20),          PRIMARY KEY (Sno),          CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')          /*定義了元組中Sname和 Ssex兩個屬性值之間的約束條件*/        );性別是女性的元組都能通過該項檢查,因為Ssex=‘女’成立;當性別是男性時,要通過檢查則名字一定不能以Ms.打頭
CONSTRAINT 約束CONSTRAINT <完整性條件約束條件名>[PRIMARY KEY短語   |FOREIGN KEY短語   |CHECK短語]
[例10]  建立學生登記表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)      );在Student表上建立了5個約束條件,包括主碼約束(命名為StudentKey)以及C1、C2、C3、C4四個資料行層級條件約束。
[例13]  修改表Student中的約束條件,要求學號改為在900000~999999之間,年齡由小於30改為小於40可以先刪除原來的約束條件,再增加新的約束條件      ALTER TABLE Student        DROP CONSTRAINT C1;        ALTER TABLE Student        ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),        ALTER TABLE Student        DROP CONSTRAINT C3;        ALTER TABLE Student        ADD CONSTRAINT C3 CHECK (Sage < 40);

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.