完整性和安全性.ppt
《完整性和安全性.ppt》由会员分享,可在线阅读,更多相关《完整性和安全性.ppt(136页珍藏版)》请在三一办公上搜索。
1、2023/10/12,1,SQL语言高级应用,第4章 完整性和安全性,2023/10/12,2,数据完整性,何为数据完整性?P9:由DBMS而不是用户程序自动检查数据的一致性、相容性,保证数据符合完整性约束条件。数据须符合的条件或数据之间的关系数据类型准确无误数据的值满足范围设置同一表格数据之间不存在冲突多个表格数据之间不存在冲突,2023/10/12,3,完整性约束条件,整个完整性控制都是围绕完整性约束条件进行的,从这个角度说,完整性约束条件是完整性控制机制的核心。,2023/10/12,4,完整性约束条件作用的对象列:对属性的取值类型、范围、精度等的约束条件元组:对元组中各个属性列间的联系
2、的约束关系:对若干元组间、关系集合上以及关系之间的联系的约束完整性约束条件作用的对象状态静态对静态对象的约束是反映数据库状态合理性的约束这是最重要的一类完整性约束动态对动态对象的约束是反映数据库状态变迁的约束,完整性约束条件,2023/10/12,5,完整性约束条件分类,对象状态 动态列级约束 动态元组约束 动态关系约束 动态 静态列级约束 静态元组约束 静态关系约束 静态 列 元组 关系 对象粒度,2023/10/12,6,静态列级约束,静态列级约束是对一个列的取值域的说明,这是最常见最简单同时也最容易实现的一类完整性约束五类静态列级约束对数据类型的约束,包括数据的类型、长度、单位、精度等
3、例:规定学生姓名的数据类型应为字符型,长度为8。对数据格式的约束例:规定学号的格式为前两位表示入学年份,后四位为顺序编号;出生日期的格式为。对取值范围或取值集合的约束例:规定成绩的取值范围为0-100;年龄的取值范围为14-29;性别的取值集合为男,女。对空值的约束:空值表示未定义或未知的值,它与零值和空格不同。有的列允许空值,有的则不允许。例:规定成绩可以为空值。其他约束例:关于列的排序说明,组合列等。,2023/10/12,7,静态元组约束,静态元组约束就是规定组成一个元组的各个列之间的约束关系。例:订货关系中包含发货量、订货量等列,发货量不得超过订货量例:教师关系中包含职称、工资等列,教
4、授的工资不得低于700元 静态元组约束只局限在单个元组上。,2023/10/12,8,静态关系约束,在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见静态关系约束实体完整性约束参照完整性约束函数依赖约束统计约束定义某个字段值与一个关系多个元组的统计值之间的约束关系例:规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。本部门职工的平均工资值是一个统计计算值。,2023/10/12,9,动态列级约束,动态列级约束是修改列定义或列值时应满足的约束条件。常见动态列级约束修改列定义时的约束例:规定将原来允许空值的列改为不允许空值时,如果该列目前已存在
5、空值,则拒绝这种修改。修改列值时的约束修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例:职工工资调整不得低于其原来工资,学生年龄只能增长,2023/10/12,10,动态元组约束,动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例:职工工资调整不得低于其原来工资+工龄*1.5,2023/10/12,11,动态关系约束,动态关系约束是加在关系变化前后状态上的限制条件。例:事务一致性、原子性等约束条件,2023/10/12,12,完整性约束条件小结,2023/10/12,13,DBMS的完整性控制机制,定义功能一个完善的完整性控制机制应该允许
6、用户定义各类完整性约束条件。检查功能立即执行的约束(Immediate constraints)检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查,我们称这类约束为立即执行的约束 延迟执行的约束(Deferred constraints)在某些情况下,完整性检查需要延迟到整个事务执行结束后再进行,我们称这类约束为延迟执行的约束违约反应 拒绝该操作 其他处理方法,2023/10/12,14,关系系统三类完整性的实现,提供有定义和检查实体完整性、参照完整性和用户定义的完整性的功能。对于违反实体完整性规则和用户定义的完整性规则的操作一般都是采用拒绝执行的方式进行处理。而对于违反参照完整性的
7、操作,并不都是简单地拒绝执行,有时还需要采取另一种方法,即接受这个操作,同时执行一些附加的操作,以保证数据库的状态仍然是正确的。,2023/10/12,15,实体完整性的实现,例:在“学号不能为空”的约束中,约束作用的对象为Sno属性则插入或修改Student 元组时,作何处理?要求Sno不能为空否则,拒绝执行该操作,2023/10/12,16,用户定义完整性的实现,例:在“教授工资不得低于1000元”的约束中,约束作用的对象为工资Sal属性则插入或修改职工元组时,作如何处理?如果职称=教授时,Sal不能小于1000 否则,拒绝执行该操作,2023/10/12,17,参照完整性的实现,外码是否
8、可以接受空值的问题删除被参照关系的元组时的问题修改被参照关系中主码的问题,2023/10/12,18,外码是否可以接受空值的问题,外码是否能够取空值是依赖于应用环境的语义的。在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允许空值的机制。,2023/10/12,19,例1:在职工部门数据库中,EMP关系包含有外码Deptno,某一元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作。这和应用环境的语义是相符的,因此EMP的Deptno列应允许空值。例2:在学生选课数据库中,Student关系为被参照关系,其主码为Sno。SC为参照关系,外码为Sno。若SC的
9、Sno为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中。这与学校的应用环境是不相符的,因此SC的Sno列不能取空值。,2023/10/12,20,删除被参照关系的元组时的问题,出现违约操作的情形需要删除被参照关系的某个元组,而参照关系有若干元组的外码值与被删除的被参照关系的主码值相对应违约反应:可有三种策略级联删除(CASCADES)将参照关系中所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除。受限删除(RESTRICTED)只有当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒
10、绝此删除操作。置空值删除(NULLIFIES)删除被参照关系的元组,并将参照关系中所有与被参照关系中被删除元组主码值相等的外码值置为空值。这三种处理方法,哪一种是正确的,要依应用环境的语义来定。,2023/10/12,21,例:要删除Student关系中Sno=200801的元组,而SC关系中有4个元组的Sno都等于200801。级联删除:将SC关系中所有4个Sno=200801的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。受限删除:系统将拒绝执行此删除操作。置空值删除:将SC关系中所有Sno=200801的元组的Sno值置为空值。在学生选课数据库中
11、,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。,2023/10/12,22,修改被参照关系中主码的问题,两种策略不允许修改主码允许修改主码 允许修改主码策略违约操作要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值违约反应修改的关系是被参照关系:与删除类似级联修改受限修改置空值修改修改的关系是参照关系:与插入类似受限修改级联修改,2023/10/12,23,修改被参照关系中主码的问题(续),级联修改修改被参照关系中主码值同时,用相同
12、的方法修改参照关系中相应的外码值。受限修改拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。置空值修改修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。,2023/10/12,24,例:学生200801休学一年后复学,这时需要将Student关系中Sno=200801的元组中Sno值改为 200923。而SC关系中有4个元组的Sno=200801级联修改:将SC关系中4个Sno=200801元组中的Sno值也改为200923。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。受限修改:只有SC中
13、没有任何元组的Sno=200801 时,才能修改Student表中Sno=200801 的元组的Sno值改为 200923。置空值修改:将Student表中Sno=200801 的元组的Sno值改为 200923。而将S表中所有Sno=200801 的元组的Sno值置为空值。在学生选课数据库中只有第一种方法是正确的。,2023/10/12,25,小结,如何进行完整性维护系统的设计?1 如何表达完整性约束条件?2 如何检查完整性约束条件?如何检查?3 违反条件时候的如何处理?,2023/10/12,26,DBMS中完整性的定义:使用约束,2023/10/12,27,CREATE TABLE定义约
14、束,约束涉及单个属性的,有两种说明方法 定义为列级约束条件定义为表级约束条件若约束涉及多个属性的,只有一种说明方法定义为表级约束条件,2023/10/12,28,列级约束例1.CREATE TABLE语句中定义列级约束 CREATE TABLE S(sno NUMERIC(6)PRIMARY KEY,-列级约束 sname CHAR(8)NOT NULL,age NUMERIC(3,0),sex CHAR(2),bplace CHAR(20);表级约束例2.CREATE TABLE语句中定义表级约束 CREATE TABLE SC(sno NUMERIC(6)NOT NULL,cno varc
15、har(3)not null,PRIMARY KEY(sno,cno),-表级约束 grade NUMERIC(2);,2023/10/12,29,例3.在Employee表中说明Eno为主码,有两种方法。将属性直接说明为主码,列级约束 CREATE TABLE Employee(Eno char(4)PRIMARY KEY,Ename varchar(8),Sex char(2),Age int,Dno char(2);在属性列表后单独说明主码,表级约束 CREATE TABLE Employee(Eno char(4),Ename varchar(8),Sex char(2),Age in
16、t,Dno char(2),PRIMARY KEY(Eno);,2023/10/12,30,ALTER TABLE定义约束,添加约束语法:ALTER TABLE ADD CONSTRAINT,;例4.ALTER TABLE 添加约束。ALTER TABLE Employee ADD CONSTRAINT uq_ename UNIQUE(Ename);删除约束:语法:ALTER TABLE DROP CONSTRAINT,;例5.ALTER TABLE 删除约束。ALTER TABLE Employee DROP CONSTRAINT uq_ename;,2023/10/12,31,UNIQUE
17、约束,允许空值在一个表上可以放置多个UNIQUE约束可以在必须有唯一值,但不是表的主关键字的一个列或多个列上应用UNIQUE约束通过在指定列上创建唯一索引强制UNIQUE约束例6.添加唯一性约束。ALTER TABLE Department ADD CONSTRAINT uq_dname UNIQUE nonclustered(dname);例7.增加Ename必须取唯一值的约束条件。ALTER TABLE Employee/*用户为该唯一值约束设定约束名为UQ_Ename*/ADD CONSTRAINT UQ_Ename UNIQUE(Ename);或者:ALTER TABLE Employ
18、ee ADD UNIQUE(Ename);/*系统将自动为此约束名赋值*/,2023/10/12,32,PRIMARY KEY约束,每个表只能定义一个PRIMARY KEY约束输入的值必须是唯一的不允许空值它在指定的列上创建一个唯一索引例8.添加主码约束ALTER TABLE DepartmentADD CONSTRAINT pk_dno PRIMARY KEY clustered(dno);,2023/10/12,33,IDENTITY属性,每一个表都可有一标识列,其中包含由系统自动生成的能够标识表中每一行数据的唯一序列值。格式:IDENTITY(SEED,INCREMENT)SEED初始值
19、,表中的第一行数据的标识列的取值,默认值为1INCREMEN步长值,每一新标识值比上一个增长多少,默认值为1使用IDENTITY列时,应注意:每张表只允许有一个IDENTITY列该列必须使用下列数据类型之一:decimal、numeric、int、smallint 和 tinyint该列必须设置成不允许为空值,且不能有默认值,2023/10/12,34,DEFAULT约束,只应用于INSERT语句每列只能定义一个DEFAULT约束不能用于IDENTITY属性或TIMESTAMP数据类型TIMESTAMP数据库范围内的唯一数字,8字节,一个表中只能一个此类型的列允许使用一些系统提供的值例9.增加
20、列Title的默认值取值为“助工”。ALTER TABLE Employee ADD CONSTRAINT DF_Title DEFAULT 助工 for Title;,2023/10/12,35,CHECK约束,在每次执行INSERT或UPDATE语句时验证数据可以引用同一表中的其他列不能在具有IDENTITY属性的列或具有timestamp或uniqueidentifier数据类型的列上放置CHECK约束不能含有子查询例10.增加列性别取值约束。ALTER TABLE EmployeeADD CONSTRAINT ck_sex CHECK(sex in(男,女);,2023/10/12,3
21、6,CHECK约束也可涉及到表中多个域,称为元组约束。在对整个元组完成插入或对某一元组的修改完成之后,系统将检查元组是否符合CHECK条件表达式。例11.添加涉及多列的CHECK约束。ALTER TABLE Salary ADD CONSTRAINT ck_RightSalary CHECK(Insure+FundBasepay);注意,完整性约束的检查将花费系统一定的时间,特别是那些复杂的CHECK条件,虽然非常有用,但不应泛滥使用。,2023/10/12,37,FOREIGN KEY约束,必须引用一个PRIMARY KEY约束或UNIQUE约束提供单列或多列引用完整性不自动创建索引用户在引
22、用的表上必须有SELECT或REFERENCES权限在同一表中只使用REFERENCES子句例12.添加外部码约束。ALTER TABLE SC ADD CONSTRAINT fk_sno FOREIGN KEY(sno)REFERENCES S(sno);,2023/10/12,38,例13.说明Employee表中Dno为外部码,被参照关系为Department。两种方法分别如下:-列级约束,只使用REFERENCES子句 CREATE TABLE Employee(Eno char(4)PRIMARY KEY,Name varchar(8),Sex char(2),Age int,Dno
23、 char(2)REFERENCES Department(Dno);-表级约束 CREATE TABLE Employee(Eno char(4)PRIMARY KEY,Name varchar(8),Sex char(2),Age int,Dno char(2),FOREIGN KEY(Dno)REFERENCES Department(Dno);,2023/10/12,39,参照完整性检查和违约处理,ON DELETE NO ACTION|CASCADE|SET NULL|SET DEFAULT ON UPDATE NO ACTION|CASCADE|SET NULL|SET DEFAU
24、LT 高版本SQL SERVER支持:SET NULL、SET DEFAULT,2023/10/12,40,ON DELETE,指定如果已创建表中的行具有引用关系,并且被引用行已从父表中删除,则对这些行采取的操作。默认值为 NO ACTION。NO ACTION 数据库引擎将引发错误,并回滚对父表中相应行的删除操作。CASCADE 如果从父表中删除一行,则将从引用表中删除相应行。SET NULL(高版本SQL SERVER支持)如果父表中对应的行被删除,则组成外键的所有值都将设置为 NULL。若要执行此约束,外键列必须可为空值。SET DEFAULT(高版本SQL SERVER支持)如果父表中
25、对应的行被删除,则组成外键的所有值都将设置为默认值。若要执行此约束,所有外键列都必须有默认定义。如果某个列可为空值,并且未设置显式的默认值,则将使用 NULL 作为该列的隐式默认值。,2023/10/12,41,例14.添加并验证外码约束的CASCADE级联操作。ALTER TABLE Employee ADD CONSTRAINT fk_emp FOREIGN KEY(Dno)REFERENCES Department(Dno)ON DELETE CASCADE ON UPDATE CASCADE;,2023/10/12,42,ON UPDATE,指定在发生更改的表中,如果行有引用关系且引用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整性 安全性
链接地址:https://www.31ppt.com/p-6268965.html