数据库概论学习笔记 其五(数据库完整性)

第五章  数据库完整性

数据库的完整性:

    数据的正确性:

        是指数据是符合现实世界语义,反映了当前实际状况的

    数据的相容性:

        是指数据库同一对象在不同关系表中的数据是符合逻辑的

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

猜你喜欢

转载自blog.csdn.net/MagicBiao/article/details/83958231