【数据库系统概论】用户定义的完整性

用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求
关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担
属性上的约束条件
CREATE TABLE时定义属性上的约束条件

列值非空(NOT NULL)
列值唯一(UNIQUE)
检查列值是否满足一个条件表达式(CHECK)
(1)不允许取空值

[例5.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)列值唯一

[例5.6]建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码

CREATE TABLE DEPT
    (   Deptno  NUMERIC(2),
        Dname  CHAR(9)  UNIQUE NOT NULL/*要求Dname列值唯一, 并且不能取空值*/
        Location  CHAR(10),
        PRIMARY KEY (Deptno)
     );
 

(3)用CHECK短语指定列值应该满足的条件

[例5.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)
      );

[例5.8] SC表的Grade的值应该在0和100之间。

   CREATE TABLE  SC
         (  Sno     CHAR(9) ,
            Cno    CHAR(4),
    Grade   SMALLINT CHECK (Grade>=0 AND Grade <=100),                  /*Grade取值范围是0到100*/
            PRIMARY KEY (Sno,Cno),
            FOREIGN KEY (Sno) REFERENCES Student(Sno),
            FOREIGN KEY (Cno) REFERENCES Course(Cno)
           );

属性上的约束条件检查和违约处理

插入元组或修改属性的值时,关系数据库管理系统检查属性上的约束条件是否被满足
如果不满足则操作被拒绝执行
元组上的约束条件

在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件
[例5.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.打头
元组上的约束条件检查和违约处理
插入元组或修改属性的值时,关系数据库管理系统检查元组上的约束条件是否被满足
如果不满足则操作被拒绝执行

posted @ 2023-03-07 04:16  小林野夫  阅读(170)  评论(0编辑  收藏  举报
原文链接:https://www.cnblogs.com/cdaniu/