当前位置:主页 > 查看内容

数据库完整性

发布时间:2021-08-09 00:00| 位朋友查看

简介:数据库完整性 数据库完整性确保的是数据的正确性和相容性 防止数据库中存在不符合语义的数据也就是防止数据库中存在不正确的数据。 防范的对象不和语义的、不正确的 数据 DBMS要做的 提供定义 完整性约束条件 的机制。 提供完整性检查的方法。 违约处理机制……

数据库完整性

数据库完整性确保的是数据的正确性和相容性

  • 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。
  • 防范的对象:不和语义的、不正确的 数据
  • DBMS要做的
    • 提供定义 完整性约束条件 的机制。
    • 提供完整性检查的方法。
    • 违约处理机制。

实体完整性

定义

  • 若属性A(一个或一组属性)是基本关系R的主属性,则A不能取空值。

    所谓空值就是“不知道”或“不存在”或“无意义”的值。

  • 实体完整性规则是针对基本关系而言的。

  • 现实世界的实体是可以区分的,他们具有某种唯一性标识。

  • 相应地,关系模型中以主码作为唯一性标识。

  • 主码中的属性不能取空值。如果主属性取空值,就说明存在某个不可比标识的实体,与1.2相违背,因此这个规则称为实体完整性。

create table `student`(
	Sno char(11) not null,
    Cno char(11) not null,
	Sname varchar(10)notnull,
    primary key(Sno,Cno)
); -- 表级的主键定义
create table `Course`(
	Cno char(11) not null primarykey,
    Cname varchar(20)
); -- 列级定义主键

检查和违约处理

  • 检查主码值是否唯一,如果不唯一则拒绝插入或修改
  • 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

参照完整性

定义

  • 现实世界中的实体之间往往存在着某种联系,在关系模型中,实体以及实体之间的联系都是用关系来表示的,这样就自然存在着关系与关系之间的引用。
  • 参照完整性用于描述实体之间的联系。
  • 参照完整性一般是指多个实体或关系之间的关联关系。
  • 参照完整性规则就是定义外键与被参照的主键之间的引用规则。
  • 外键要么值为空要么等于其所参照的关系中的某个元组的主键值。

外键会拖垮查询效率,用程序级别实现

create table `student`(
	Sno char(11) not null,
    Cno char(11) not null,
	Sname varchar(10)notnull,
    primary key(Sno,Cno),
    foreign key(Cno)references Course(Cno) -- 表级定义的参照完整性
);
被参照表参照表违约处理
可能破坏参照完整性插入元组拒绝
可能破坏参照完整性修改外键值拒绝
删除元组可能破坏参照完整性拒绝/级联修改/设为控制
修改主键值可能破坏参照完整性拒绝/级联修改/设为控制
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表中相应的元组*/
        );

用户定义的完整性

**针对某一具体应用的数据必须满足的语义要求 **

  • 是针对语义定义的数据约束条件。
  • 实际上就是指明关系中属性的取值范围,防止属性的值与语义矛盾
  • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统方法处理它们,而不要由应用程序承担这一功能。

定义

  • 建表时
    • not null 列值非空。
    • unique 列值唯一。
    • check( )检查列值是否满足一个布尔表达式。

违约处理

  • 插入元组或者修改属性值时,DBMS检查属性上的约束条件是否被满足,如果不满足则拒绝执行

完整性约束命名子句

  • constaint约束

    constraint <Cname>
    [primary key...
     foreign key...
     check...]
     
     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)
     );
    -- -----------修改约束条件
    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);
    
;原文链接:https://blog.csdn.net/wakakawsad/article/details/115841252
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐