数据库完整性详细解释

数据库完整性

数据库的完整性是指数据的正确性和相容性。正确性指的是符合现实世界的语义l反映了当前实际状况的,相容性指同一个对象在不同的关系里面是符合逻辑的。例如:性别只能是男的或者女的,学生的选修课必须是本校的开设课程,学生的学号必须唯一等。数据的完整性是为了防止数据库中存在不符合语义的句子。

为了维护数据库的完整性,数据库管理系统必须能够实现以下功能:

  • 提供定义完整性约束条件机制
  • 提供完整性检查的方法
  • 进行违约处理

实体完整性

1.定义实体完整性

关系模型中的实体完整性在CREATE TABLE中用PRIMARY KEY定义,有两种定义方法,列级约束条件、表级约束条件。

列级约束条件:

CREATE TABLE Student
	(Sno CHAR(9) PRIMARY KEy,/*在列级定义主码。*/
	  Sname CHAR(20)NOT NULL,
	  Ssex CHAR(2),
	  Sage SMALLINT,
	  Sdept CHAR(20)
	 );

表级约束条件(定义多个码时只能用表级约束条件):

CREATE TABLE Student
	(Sno CHAR(9) ,
	  Sname CHAR(20)NOT NULL,
	  Ssex CHAR(2),
	  Sage SMALLINT,
	  Sdept CHAR(20),
	  PRIMARY KEy(sno)
	 );

2.实体完整性检查和违约处理

当PRIMARY KEY定义了主码以后当用户对表中的数据进行修改的时候,列如插入删除更新时,数据库管理系统会对实体完整性进行如下检查:

+ 检查主码是否唯一
+ 检查主码的属性是否为空,为空则拒绝插入或者修改。

参照完整性

1.定义参照完整性

关系模型中的参照完整性在CREATE TABLE中用FOREIGN KEY定义外码,用REFERENCES指明外码参照哪个表的主码。

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)    
                  /*在表级定义参照完整性*/
             );

2.参照完整性的检查和违约处理

参照完整性将两个表联系起来了,当对参照表和被参照表进行增删改的时候,可能会破坏参照完整性。,所以需要进行参照完整性的检查。以下可能会破坏参照完整性

image-20220517143749290

参照完整性的违约处理

  • 拒绝执行(NO ACTION)

  • 级联操作(CASCADE)

    当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组。

  • 设为空值

    l当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

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表中相应的元组*/
           );

3.用户定义的完整性

属性上的约束条件

在创建表的时候,可以定义属性上的约束条件,包括:

  • 列值非空(NOT NULL)、
  • 列值唯一(UNIQUE)
  • 检查列值是否满足一个条件表达式(CHECk)
CREATE TABLE DEPT
        (   Deptno  NUMERIC(2),
            Dname  CHAR(9)  UNIQUE NOT NULL,
                                          /*要求Dname列值唯一, 并且不能取空值*/
            Location  CHAR(10),
            PRIMARY KEY (Deptno)
         );

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

元组上的约束条件

在CREATE TABLE语句中可以用CHECK短语定义元组上的约束条件,是元组级的限制

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两个属性值之间的约束条件*/
          );

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值