数据库完整性(实体完整性,参照完整性,用户定义完整性) 您所在的位置:网站首页 图示的含义和作用特点是什么 数据库完整性(实体完整性,参照完整性,用户定义完整性)

数据库完整性(实体完整性,参照完整性,用户定义完整性)

2023-12-24 08:36| 来源: 网络整理| 查看: 265

数据库完整性: 指数据库中数据的正确性、相容性 正确性:保证进入数据库的数据是符合语义约束的合法数据相容性:同一个事实的两个数据应当是一致的

 

 为了维护数据库的定义完整性:

DBMS必须具备三个功能:(完整性定义、检查控制、违约处理都是由DBMS来完成)

(1)提供定义完整性条件约束的机制(实体完整性,参照完整性,用户定义完整性)

(2)提供完整性检查的方法(一般在 insert 、update 、delete、等语句执行后检查)

(3)违约处理 

完整性约束条件的分类

①就被约束的数据对象而言,完整性约束又可以分为如下表所示的四种类型

约束类型    含义     类型/域约束    说明给定类型的合法取值    用户自定义的完整性 属性约束         说明属性的合法取值    用户自定义的完整性 关系约束         说明关系的合法取值    实体完整性/用户自定义的完整性 数据库约束    说明数据库的合法取值,通常涉及多个关系    实体完整性/用户自定义的完整性 ②从约束的状态的角度,约束还可以分静态约束和动态约束

静态约束是关于数据库正确状态的约束 动态约束是数据库从一种正确状态转移到另一种状态的转移约束

实体完整性(两个关系的不变性之一):

关系模型的实体完整性在 create table  中用 primary key (主键) 定义。

单属性构成的码有两种说明方法:(1)定义列级约束条件 (2)定义表级约束条件

多属性构成的码只有一种说明方法 : 定义表级约束条件

建议都使用表级约束条件!(可使条件更加清晰)

①实体完整性定义:

每个关系应该有一个主码(可唯一标识表中的一条记录),每个元组的主码值惟一确定该元组 主码的任何属性都不能取空值

②违反实体完整性规则的操作

插入(insert)新元组时可能破坏实体完整性规则(DBMS自动检查主码是否为空)修改(updata)元组的主码时可能破坏实体完整性规则(DBMS自动检查主码是否为空) DBMS应该自动检查是否导致违反实体完整性约束,并拒绝导致破坏实体完整性约束的任何插入或修改 SQL支持实体完整性。用户只需要在创建基本表时说明关系的主码,系统就能够自动地保证实体完整性

 

参照完整性 ( P46 ) :实现这种引用规则(一对一,多对多),要求外码的取值只是被参照表主码的值或者取空值

关系模型的参照完整性在 create table 中用 foreign key 短语定义那些列为外码

用 references 短语指明这些外码参照哪些表的主码

foreign key (A1,...,An) references () [] --指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝 --参照触发动作可以是以下两种 on update [on delete ] on delete [on update ] --参照动作可以是拒绝、级联、置空值、置缺省值之一 --关系SC中(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码定义SC中的参照完整性 create table SC( Sno char(9) not null, Cno char(4) not null, Grade int, primary key (Sno, Cno), /*在表级定义实体完整性*/ foreign key (Sno) references Student(SNO), /*在表级定义参照完整性*/ foreign key (Cno) references Course(Cno) /*在表级定义参照完整性*/ ); ①参照完整性规则:

参照关系R的任何元组在其外码FKR上的值或者等于被参照关系S的某个元组在主码Ks上的值,或者为空值

②违反参照完整性的更新

向参照表(外键(foreign key)在的表,如:Sno , Cno)关系R中插入元组 修改参照表关系R外码上的值

删除被参照表(在 references 后面的表,如:Student)关系S的元组 修改被参照表(在 references 后面的表,如:Course)关系S主码上的值

③违约处理(违背完整性约束条件)

向参照关系R插入元组:拒绝( 默认 ) 修改参照关系R外码上的值:拒绝( 默认 ) 删除被参照关系S的元组:拒绝/级联( cascade )删除/置空值( set-null )/置缺省值 修改被参照关系S主码上的值:拒绝/级联删除( cascade )/置空值( set-null )/置缺省值

④SQL中的参照完整性

外码可以在创建基本表时用FOREIGN KEY子句说明, 形式为: FOREIGN KEY (A1,…, Ak) REFERENCES () [] 指:当修改和删除违反参照完整性约束时触发的动作( 缺省值,违反参照完整性的修改和删除将被拒绝 ) 可以是如下两种形式之一:ON UPDATE [ON DELETE ] ONDELETE [ON UPDATE ]

其中可以是CASCADE、SET NULL、SET DEFAULT和NO ACTION 之一,分别表示级联、置空值、置缺省值和拒绝 ON DELETE 缺省时,违反参照完整性的删除将被拒绝 ON UPDATE缺省时,违反参照完整性的修改将被拒绝 eg: 如果我们希望在更新Students元组的主码时同时修改相应的SC元组的外码Sno,删除Students的元组时同时删除相应的SC元组;

而更新Courses的元组时同时修改相应的SC元组的外码Cno,但不允许删除Courses的元组破坏参照完整性,则我们可以用如下语句创建基本表SC:

CREATE TABLE SC (Sno CHAR (9) not null, Cno CHAR (5) not null, Grade SMALLINT CHECK (Grade>=0 AND Grade


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有