数据库的完整性

来源:互联网 发布:销售人员定位软件 编辑:程序博客网 时间:2024/05/02 04:38

1.完整性概述

(1)概念:数据库的完整性是指数据库中的数据的正确性,一致性和相容性。

(2)分类:a.类型(域)约束:说明给定的类型的合法取值

                    b.属性约束:说明属性的合法取值

                    c.关系约束:说明关系的合法取值

                    d.数据库约束:说明数据库的合法取值,通常涉及多个关系

一般而言,实体完整性是一种关系约束,参照完整性是一种数据库约束,用户定义的完整性可以使上述四种约束的任何一种。

2.实体完整性是一个关系内的约束

要求:

(1)每个关系应该有一个主码,每个元组的主码值唯一确定该元组。

(2)主码的任何属性都不能取空值。

3.参照完整性

要求:参照关系R的任何元组在其外码FK上值或者等于被参照关系S的某个元组在主码ks上的值,或者为空值。

违反参照完整性的更新:(1)向参照关系R中插入新元组tr。如果不存在被参照关系S的元组ts使得tr【FK】= ts【K】则破坏参照完整性

                                        (2)从被参照关系S中删除元组ts。如果存在参照关系R的元组tr使得ts【K】=tr【FK】,则破坏参照完整性

                                        (3)修改参照关系R的元组tr外码上的值。如果不存在被参照关系S的元组ts使得new(tr【FK】)=ts【K】,则破坏参照完整性

                                        (4)修改被参照关系S的元组ts主码上的值。如果存在参照关系R的元组tr使得old(ts【K】)=tr【Fk】,则破坏参照完整性

保证参照完整性的措施:(1)拒绝(2)级联(3)置空值(4)置缺省值

SQL对参照完整性的支持:创建基本表的属性是外码的子句具有如下形式:FOREIGN KEY(A1,...,AK)REFERENCES<外表名>(<外表主码>)

                                                                                                                       [<参照触发动作>]

其中,参照触发动作指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝。

参照触发动作可以使如下两种形式之一:ON UPDATE<参照动作>[ON DELETE<参照动作>]或ON DELETE<参照动作>[ON UPDATE<参照动作>]其中,参照动作可以使CASCADE,SET NULL,SET DEFAULT 和NO ACTION(拒绝)

如:CREATE TABLE SC

(Sno CHAR(9),

Cno CHAR(5),

Grade SMALLINT CHECK(Grade >=0 AND Grade <= 100),

PRIMARY KEY(Sno,Cno),

FOREIGN KEY(Sno) REFERENCES Students(Sno)

       ON UPDATE CASCADE ON DELETE CASCADE,

FOREIGN KEY(Cno)REFERENCES Courses(Cno)

     ON UPDATE CASCADE);

注:ON DELETE<参照动作>缺省时为拒绝,ON UPDATE<参照动作>缺省时也为拒绝。

4.域约束:每个属性都必须在一个值域上取值。

(1)创建域 语句形式如下:CREATE DOMAIN<域名>[AS]<数据类型>

                                               [DEFAULT<缺省值>]

                                               [<域约束>,...,<域约束>]其中,域约束有如下形式:[CONSTRAINT<约束名>]CHECK(<条件>)[<约束性质>]注:其中的域值用VALUE表示,可选的约束性质可以使NOT DEFERRABLE(不可延迟的)或DEFERRABLE(可延迟的)缺省时为不可延迟(约束立即检查)

举例如下:CREATE DOMAIN RMB NUMERIC(12.2)DEFAULT 0.00;

                  CREATE DOMAIN SexType CHAR(2) CONSTRAINT SexTest CHECK(VALUE IN('男','女'));

(2)修改域约束包括设置缺省值,删除缺省值,添加约束和删除约束

其语句格式如下:ALTER DOMAIN<域名><修改动作>其中修改动作可以是:

a.SET DEFAULT<缺省值>

b.DROP DEFAULT

c.ADD<域约束>

d.DROP CONSTRAINT<约束名>

举例如下:ALTER DOMAIN HourlyWage SET DEFAULT 5.00;

                  ALTER DOMAIN SexType DROP CONSTRAIN SexTest;

                 ALTER DOMAIN SexType ADD CONSTRAINT SexTest CHECK(VALUE IN('M','F'));

(3)删除域 语句格式为 DROP DOMAIN<域名>{CASCADE|RESTRICT}

如:DROP DOMAIN SexTpe RESTRICT;

5.关系约束

(1)关系约束可以分为静态约束和动态约束;静态约束时规定关系各个属性值之间应该满足的约束关系。动态约束是指修改元组的值时需要满足的约束条件

(2)SQL支持关系约束,SQL允许在创建基本表时使用如下形式的CHECK子句定义一个或多个表约束:CHECK(<条件>)[<约束性质>]

原创粉丝点击