您的位置:首页 > 数据库

4-1完整性控制

2016-06-30 13:15 253 查看

4-1完整性控制

tags:数据库

数据库的完整性是指数据库的正确性和相容性.数据的正确性是指数据库数据是符合现实世界语意、反应当前实际状况的;数据库的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的.

数据完整性和安全性是两个既有联系又不尽相同的概念,数据的完整性是为了防止数据库中存在不符合语意的数据,其对象是数据,数据的安全性是保护数据库防止恶意破坏和非法存取,其对象是非法用户和非法操作.

为维护数据库的完整性,数据库管理系统必须实现:

1. 提供定义完整性约束条件的机制

2. 提供完整性检查的方法

3. 进行违约处理

实体完整性

实体完整性定义

关系模型中的实体完整性在create table 中用primary key定义.对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件.对于多个属性构成的码只能定义表级约束条件.

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

处理方法:

1. 检查主码值是否唯一,如果不唯一则拒绝插入或者修改.

2. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或者修改.

检验主码值是否唯一的方法:

1. 全表扫描

2. 在主码值上建立索引 http://blog.csdn.net/kennyrose/article/details/7532032

参照完整性

关系模型中的参照完整性在create table 中用foreign key短语定义哪些为外码,用reference 定义这些外码参照哪些表的主码.

create table sc (

sno char(9) not null,

cno char(4) not null,

grade smallint,

primary key(sno,cno),

foreign key(sno) reference student(sno),

foreign key(cno) reference course(cno)

)

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

被参照表 参照表 违约处理

可能破坏参照完整性 <- 插入元组 拒绝

可能破坏参照完整性 <- 修改外码值 拒绝

删除元组 -> 可能破坏参照完整性 拒绝/级联/设为空值

修改主码值 -> 可能破坏参照完整性 拒绝/级联/设为空值

create table sc(
sno char(9),
cno char(4),
grade smallint,
primary key (sno ,cno),
foreign key(sno) references student(sno)
on delete cascade  当删除student表中的元组时,级联删除sc表中相应的属性.
on update no action   当更新student表中的sno时,若造成完整破坏那么不采取任何操作.
)


用户定义的完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语意要求.

属性上的约束条件

条件:

1. 列值非空 not null

2. 列值唯一 unique

3. 检查列值是否满足一个条件表达式 check

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

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

元组上的约束条件

与属性上约束条件定义类似,在create table 语句中可以用check短语定义元组上的约束条件,即元组级约束限制.

create table student

(sno char(9),

sbane char(8) not null,

ssex char(2),

sage smallint,

sdept char(20),

primary key (sno),

check(ssex = ‘女’ or sname not like ‘Ms.%’)

)

元组上约束条件的检查和违约处理

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

完整性约束命名子句

constraint <完整性约束条件名> <完整性约束条件>

完整性条件包括 not null,unique,primary key,foreign key,check

create table student (sno numeric(6) constraint c1 check(sno between 90000 and 99999),

constraint studentkey primary key(sno)

)

使用alter table语句修改表中完整性限制若要修改完整性显示,需要先将完整性空值删除,然后再通过add 添加.

alter table student drop constraint c1;

alter table student

add constraint c1 check(sno between 90000 and 99999)

域中的完整性控制

SQL支持域的概念,并可以用create domain 语句建立一个域以及该域应该满足的完整性约束条件,然后就可以用域来定义属性.

这样的优点是,数据库中不同属性可以来自同一个域,当域上完整性约束条件改变时只要修改域的定义即可.

建立一个性别域

create domain genderdomain char(2) check (value in (‘男’,’女’));

建立一个性别域,并对其中限制命名

create domain genderdomain constraint gd check(value in (‘男’,’女’))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 完整性