数据库复习——第五章

数据库的完整性:指数据的正确性和相容性

  • 数据的正确性:是指数据是符合现实世界语义,反映了当前实际状况的
  • 数据的相容性:是指数据库同一对象不同关系表中的数据是符合逻辑的

数据库安全性与完整性的区别与联系

  • 数据的完整性
    • 防止数据库中存在不符合语义的数据,也就是不正确的数据
    • 防范对象:不合语义的、不正确的数据
  • 数据的安全性
    • 保护数据库,防止恶意的破坏和非法的存取
    • 防范对象:非法用户和非法操作
5.1 实体完整性
  • 内容:若属性(或属性组)A是基本关系R的主属性,则属性A不能取空值(空值就是“不知道”或“不存在”或“无意义”的值)

  • 定义:CREATE TABLE中用PRIMARY KEY定义

    • 单属性构成的码有两种说明方法 :

      • 定义为列级约束条件

        /* 将Student表中的Sno属性定义为码 */
        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) /* 在表级定义主码 */
          );
        
    • 多个属性构成的码只有一种说明方法:

      • 定义为表级约束条件

        /* 将SC表中的Sno,Cno属性组定义为码 */
        CREATE TABLE SC
          (Sno CHAR(9) NOT NULL, 
           Cno CHAR(4) NOT NULL,  
           Grade SMALLINT,
           PRIMARY KEY (Sno,Cno) /* 只能在表级定义主码 */
          ); 
        
  • 检查和违约处理:插入记录或对主码列进行更新操作时,关系数据库管理系统按照实体完整性规则自动进行检查,包括:

    • 检查主码值是否唯一,如果不唯一则拒绝插入或修改
    • 检查主码的各个属性是否为空只要有一个为空就拒绝插入或修改
5.2 参照完整性
  • 内容:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:

    • 或者取空值(F的每个属性值均为空值)
    • 或者等于S中某个元组的主码值
  • 定义:在CREATE TABLE中用FOREIGN KEY定义哪些列为外码,用REFERENCES指明这些外码参照哪些表的主码

    • 表级定义参照完整性

      /* 关系SC中(Sno,Cno)是主码 Sno,Cno分别参照Student表和Course表的主码 */
      /* 定义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)   /*在表级定义参照完整性*/
        );
      
  • 检查和违约处理:一个参照完整性将两个表中的相应元组联系起来,对被参照表和参照表进行增删改操作时有可能破坏参照完整性,必须进行检查

    • 拒绝执行(NO ACTION
      不允许该操作执行(该策略一般设置为默认策略

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

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

      /* 显式说明参照完整性的违约处理示例 */
      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表中相应的元组*/
         );
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值