《数据库系统及应用精.ppt》由会员分享,可在线阅读,更多相关《数据库系统及应用精.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库系统及应用第1页,本讲稿共70页 数据库的完整性(数据库的完整性(IntegrityIntegrity):):数据库的完整性是指保证数据库数据库的完整性是指保证数据库中数据的中数据的正确性正确性(Correctness)(Correctness)、准确准确性性(AccuracyAccuracy)和)和有效性有效性(Validity)(Validity),防止不合语义的数据进入数据库防止不合语义的数据进入数据库。第2页,本讲稿共70页例如:学生的年龄必须是整数,取值范围例如:学生的年龄必须是整数,取值范围为为14-2914-29;学生的性别只能是男或女;学生的性别只能是男或女;学生的学号一
2、定是唯一的;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;学生所在的系必须是学校开设的系;第3页,本讲稿共70页 为维护数据库的完整性,为维护数据库的完整性,DBMSDBMS必须必须提供一种机制来检查数据库的完整性,提供一种机制来检查数据库的完整性,看其是否满足语义规定的条件。看其是否满足语义规定的条件。DBMS DBMS中检查数据是否满足完整性条中检查数据是否满足完整性条件的机制称为完整性检查。件的机制称为完整性检查。第4页,本讲稿共70页 现代数据库技术采用对数据完整性的现代数据库技术采用对数据完整性的现代数据库技术采用对数据完整性的现代数据库技术采用对数据完整性的语义约束和检查
3、来保护数据库的完整性,语义约束和检查来保护数据库的完整性,语义约束和检查来保护数据库的完整性,语义约束和检查来保护数据库的完整性,其实现方式有两种:一种是通过定义和使其实现方式有两种:一种是通过定义和使其实现方式有两种:一种是通过定义和使其实现方式有两种:一种是通过定义和使用完整性约束规则用完整性约束规则用完整性约束规则用完整性约束规则(系统定义)(系统定义)(系统定义)(系统定义),另一种,另一种,另一种,另一种是通过触发器(是通过触发器(是通过触发器(是通过触发器(TriggerTriggerTriggerTrigger)和存储过程)和存储过程)和存储过程)和存储过程(Stored Pro
4、cedureStored ProcedureStored ProcedureStored Procedure)(用户自定义)(用户自定义)(用户自定义)(用户自定义)等等等等过程来实现。过程来实现。过程来实现。过程来实现。第5页,本讲稿共70页 完完完完整整整整性性性性子子子子系系系系统统统统:负负负负责责责责处处处处理理理理数数数数据据据据库库库库的的的的完完完完整整整整性性性性语语语语义义义义约约约约束束束束的的的的定定定定义义义义和和和和检检检检查查查查,防防防防止止止止因因因因错错错错误误误误的的的的更更更更新新新新操操操操作作作作产产产产生生生生的的的的不不不不一一一一致致致致性性性
5、性。用用用用户户户户可可可可以以以以使使使使用用用用完完完完整整整整性性性性保保保保护护护护机制,对某些数据规定一些语义约束。机制,对某些数据规定一些语义约束。机制,对某些数据规定一些语义约束。机制,对某些数据规定一些语义约束。当当当当进进进进行行行行数数数数据据据据操操操操作作作作时时时时,DBMSDBMSDBMSDBMS就就就就由由由由某某某某个个个个完完完完整整整整性性性性语语语语义义义义约约约约束束束束的的的的触触触触发发发发条条条条件件件件激激激激发发发发相相相相应应应应的的的的检检检检查查查查程程程程序序序序,进行完整性语义约束检查。进行完整性语义约束检查。进行完整性语义约束检查。
6、进行完整性语义约束检查。若若若若发发发发现现现现错错错错误误误误的的的的更更更更新新新新操操操操作作作作,立立立立即即即即采采采采取取取取措措措措施施施施处处处处理理理理,或或或或是是是是拒拒拒拒绝绝绝绝执执执执行行行行该该该该更更更更新新新新操操操操作作作作,或或或或是是是是发发发发出出出出警警警警告告告告信信信信息息息息,或者纠正已产生的错误。或者纠正已产生的错误。或者纠正已产生的错误。或者纠正已产生的错误。第6页,本讲稿共70页 DBMS DBMS的完整性子系统是负责数据库的完的完整性子系统是负责数据库的完整性控制的。整性控制的。它具有它具有3 3个功能:个功能:完整性约束条件定义机制完
7、整性约束条件定义机制 完整性检查机制完整性检查机制 违约反应违约反应 第7页,本讲稿共70页 完整性约束条件:完整性约束条件:数据模型的组成部数据模型的组成部分,约束数据库中数据的语义。分,约束数据库中数据的语义。DBMS DBMS应提供定义数据库完整性约束应提供定义数据库完整性约束条件的机制,并把它们作为模式的一部条件的机制,并把它们作为模式的一部分存入数据库中。分存入数据库中。一般由一般由SQLSQL的的DDLDDL语句来实现。语句来实现。F 完整性约束条件定义机制完整性约束条件定义机制第8页,本讲稿共70页 检查用户发出的操作请求是否违背检查用户发出的操作请求是否违背了完整性约束条件的方
8、法了完整性约束条件的方法F 完整性检查机制完整性检查机制第9页,本讲稿共70页 如果发现用户的操作请求使数据违背了如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作,如拒完整性约束条件,则采取一定的动作,如拒绝用户执行该操作,来保证数据的完整性。绝用户执行该操作,来保证数据的完整性。F 违约反应违约反应第10页,本讲稿共70页12.1 12.1 完整性规则完整性规则 数据库完整性子系统是根据数据库完整性子系统是根据“完整完整性规则集性规则集”工作的。完整性规则集包含一工作的。完整性规则集包含一组完整性约束规则(组完整性约束规则(Integrity Integrity Const
9、raintConstraint)。)。一个完整性约束规则包含一个完整性约束规则包含完整性约束条件、规则的触发条件和完整性约束条件、规则的触发条件和“ELSEELSE子句子句”。完整性检查是围绕完整性约束条件进行完整性检查是围绕完整性约束条件进行的,因此的,因此数据库的完整性约束条件是完整数据库的完整性约束条件是完整性控制机构的核心。性控制机构的核心。第11页,本讲稿共70页 一一一一个个个个完完完完整整整整性性性性约约约约束束束束条条条条件件件件可可可可以以以以看看看看作作作作是是是是一一一一个个个个谓谓谓谓词词词词(PredicatePredicatePredicatePredicate),
10、所所所所有有有有正正正正确确确确的的的的保保保保持持持持完完完完整整整整性的数据库状态都应当满足这个谓词。性的数据库状态都应当满足这个谓词。性的数据库状态都应当满足这个谓词。性的数据库状态都应当满足这个谓词。例如,例如,例如,例如,SCORE.GRADE0SCORE.GRADE0SCORE.GRADE0SCORE.GRADE0。规规规规则则则则的的的的触触触触发发发发条条条条件件件件规规规规定定定定何何何何时时时时使使使使用用用用该该该该规规规规则则则则做做做做检查。检查。检查。检查。“ELSEELSEELSEELSE子子子子句句句句”规规规规定定定定当当当当完完完完整整整整性性性性约约约约束
11、束束束条条条条件件件件不不不不满满满满足时须做的操作。足时须做的操作。足时须做的操作。足时须做的操作。第12页,本讲稿共70页 在关系数据库中,数据的完整性规则一般有以在关系数据库中,数据的完整性规则一般有以下类型。下类型。域完整性规则:定义属性的取值范围;域完整性规则:定义属性的取值范围;关系完整性规则:定义更新操作对数据库中关系完整性规则:定义更新操作对数据库中的值的影响和限制;的值的影响和限制;实体完整性约束:定义在一个关系中,主实体完整性约束:定义在一个关系中,主属性不能取空值属性不能取空值 参参照照完完整整性性约约束束:定定义义在在一一个个或或多多个个关关系系中,属性值间的联系、影响
12、和约束。中,属性值间的联系、影响和约束。第14页,本讲稿共70页 这些规则是用这些规则是用DDLDDL描述的,一旦一条完描述的,一旦一条完整性规则输入给系统,系统就开始执行这条整性规则输入给系统,系统就开始执行这条规则。这种方法的规则。这种方法的主要优点是由系统处理违主要优点是由系统处理违反规则的情况,而不是由用户处理反规则的情况,而不是由用户处理。其次,。其次,规则集中存放在数据字典中,当需要修改规则集中存放在数据字典中,当需要修改时,可以很方便地修改。时,可以很方便地修改。第15页,本讲稿共70页 定义域约束规定某个属性的值必须符合定义域约束规定某个属性的值必须符合某种数据类型并且取自某个
13、数据定义域。域某种数据类型并且取自某个数据定义域。域完整性约束施加于单个数据上。完整性约束施加于单个数据上。0 0人的年龄人的年龄150 150 仓库库存量仓库库存量00 0 0一个月的工作天数一个月的工作天数3131 长途电话号码格式为长途电话号码格式为999999999999999999991.1.域完整性约束域完整性约束第16页,本讲稿共70页 对关系的完整性进行约束的主要目的对关系的完整性进行约束的主要目的是维持用户规定的函数依赖。例如,如果是维持用户规定的函数依赖。例如,如果用户定义了下列函数依赖:用户定义了下列函数依赖:NAMEADDRESSNAMEADDRESS。2.2.关系完整
14、性约束关系完整性约束第17页,本讲稿共70页 主码(主关键字)是实体完整性约主码(主关键字)是实体完整性约主码(主关键字)是实体完整性约主码(主关键字)是实体完整性约束(束(束(束(Entity ConstraintEntity ConstraintEntity ConstraintEntity Constraint)。)。)。)。3.3.实体完整性约束实体完整性约束第18页,本讲稿共70页 外码(外部关键字)是参照完整性外码(外部关键字)是参照完整性外码(外部关键字)是参照完整性外码(外部关键字)是参照完整性约束(约束(约束(约束(Referential ConstraintReferent
15、ial ConstraintReferential ConstraintReferential Constraint)的一)的一)的一)的一个典型例子。个典型例子。个典型例子。个典型例子。4.4.参照完整性约束参照完整性约束第19页,本讲稿共70页 在关系系统中,最重要的完整性约束是在关系系统中,最重要的完整性约束是实体完实体完整性约束整性约束和和参照完整性约束参照完整性约束,其他完整性约束条件,其他完整性约束条件则可以归入则可以归入用户定义的完整性约束用户定义的完整性约束。对于违反实体完整性和用户定义的完整性操作对于违反实体完整性和用户定义的完整性操作一般都采用拒绝执行的方式进行处理,而对于
16、违反一般都采用拒绝执行的方式进行处理,而对于违反参照完整性的操作,并不都是简单地拒绝执行,有参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数时要根据应用语义执行一些附加的操作,以保证数据库的正确性。据库的正确性。12.2 12.2 完整性控制机制完整性控制机制第23页,本讲稿共70页关系模型的实体完整性关系模型的实体完整性 CREATE TABLE CREATE TABLE CREATE TABLE CREATE TABLE中用中用中用中用PRIMARY KEYPRIMARY KEYPRIMARY KEYPRIMARY KEY定义定义定义定义单属性构成的
17、码有两种说明方法单属性构成的码有两种说明方法 定义为列级约束条件定义为列级约束条件定义为列级约束条件定义为列级约束条件 定义为表级约束条件定义为表级约束条件定义为表级约束条件定义为表级约束条件对多个属性构成的码只有一种说明方法对多个属性构成的码只有一种说明方法 定义为表级约束条件定义为表级约束条件定义为表级约束条件定义为表级约束条件 12.2.1 12.2.1 实体完整性实体完整性第24页,本讲稿共70页例例例例12.1 12.1 将将将将StudentStudent表中的表中的表中的表中的SnoSno属性定义为码属性定义为码属性定义为码属性定义为码 (1)在列级定义主码在列级定义主码 CRE
18、ATE TABLE StudentCREATE TABLE Student (Sno CHAR(5)PRIMARY KEY,Sname CHAR(20)NOT NULL Sname CHAR(20)NOT NULL,Ssex CHAR(2)Ssex CHAR(2),Sage NUMBER(2)Sage NUMBER(2),Sdept CHAR(2);Sdept CHAR(2);第25页,本讲稿共70页(2)在表级定义主码在表级定义主码 CREATE TABLE Student (Sno CHAR(5),Sname CHAR(20)NOT NULL,Ssex CHAR(2),Sage NUMBE
19、R(2),Sdept CHAR(2),PRIMARY KEY(Sno)PRIMARY KEY(Sno);第26页,本讲稿共70页例例12.2 将将SCore表中的表中的Sno,Cno属性组定义属性组定义为码。为码。CREATE TABLE SCORE CREATE TABLE SCORE (Sno CHAR(5)(Sno CHAR(5),/*/*NOT NULL */*/Cno CHAR(3)Cno CHAR(3),/*NOT NULLNOT NULL */*/Score NUMBER(6,2),PRIMARY KEY(SnoPRIMARY KEY(Sno,Cno)Cno)/*/*只能在表级定
20、义主码只能在表级定义主码只能在表级定义主码只能在表级定义主码*/*/););第27页,本讲稿共70页 插入或对主属性列进行更新操作时,插入或对主属性列进行更新操作时,RDBMSRDBMS按照实体完整性规则自动进行检查。按照实体完整性规则自动进行检查。包括:包括:检查主码值是否唯一,如果不唯一则拒绝插入或检查主码值是否唯一,如果不唯一则拒绝插入或检查主码值是否唯一,如果不唯一则拒绝插入或检查主码值是否唯一,如果不唯一则拒绝插入或修改修改修改修改 检查主码的各个属性是否为空,只要有一个为检查主码的各个属性是否为空,只要有一个为检查主码的各个属性是否为空,只要有一个为检查主码的各个属性是否为空,只要
21、有一个为空就拒绝插入或修改空就拒绝插入或修改空就拒绝插入或修改空就拒绝插入或修改第28页,本讲稿共70页12.2.2 12.2.2 参照完整性参照完整性F关系模型的参照完整性关系模型的参照完整性 在在CREATE TABLECREATE TABLE中用中用FOREIGN KEYFOREIGN KEY短语定短语定义哪些列为外码义哪些列为外码 用用REFERENCESREFERENCES短语指明这些外码参照短语指明这些外码参照哪些表的主码哪些表的主码第29页,本讲稿共70页 例如,关系例如,关系SCoreSCore中一个元组表示一个学生选修的中一个元组表示一个学生选修的某门课程的成绩,某门课程的成
22、绩,(Sno(Sno,Cno)Cno)是主码。是主码。SnoSno,CnoCno分别参分别参照引用照引用StudentStudent表的主码和表的主码和CourseCourse表的主码。表的主码。例例例例12.3 12.3 12.3 12.3 定义定义定义定义SCoreSCoreSCoreSCore中的参照完整性中的参照完整性中的参照完整性中的参照完整性 CREATE TABLE Score CREATE TABLE Score CREATE TABLE Score CREATE TABLE Score (Sno CHAR(5)(Sno CHAR(5)(Sno CHAR(5)(Sno CHAR
23、(5),Cno CHAR(3)Cno CHAR(3)Cno CHAR(3)Cno CHAR(3),Score NUMBER(6,2)Score NUMBER(6,2)Score NUMBER(6,2)Score NUMBER(6,2),PRIMARY KEY(Sno PRIMARY KEY(Sno PRIMARY KEY(Sno PRIMARY KEY(Sno,Cno)Cno)Cno)Cno),/*/*/*/*在表级定义实体完整性在表级定义实体完整性在表级定义实体完整性在表级定义实体完整性*/*/*/*/FOREIGN KEY(Sno)REFERENCES Student(Sno)FOREIG
24、N KEY(Sno)REFERENCES Student(Sno)FOREIGN KEY(Sno)REFERENCES Student(Sno)FOREIGN KEY(Sno)REFERENCES Student(Sno),/*/*/*/*在表级定义参照完整性在表级定义参照完整性在表级定义参照完整性在表级定义参照完整性*/*/*/*/FOREIGN KEY(Cno)REFERENCES Course(Cno)FOREIGN KEY(Cno)REFERENCES Course(Cno)FOREIGN KEY(Cno)REFERENCES Course(Cno)FOREIGN KEY(Cno)RE
25、FERENCES Course(Cno)/*/*/*/*在表级定义参照完整性在表级定义参照完整性在表级定义参照完整性在表级定义参照完整性*/*/*/*/););););第30页,本讲稿共70页F 参照完整性违约处理参照完整性违约处理拒绝拒绝拒绝拒绝(RESTRICT)(RESTRICT)(RESTRICT)(RESTRICT)执行执行执行执行 默认策略默认策略级联级联(CASCADE)(CASCADE)操作操作设置为空值(设置为空值(SET NULLSET NULL)对于参照完整性,除了应该定义外码,还应定对于参照完整性,除了应该定义外码,还应定对于参照完整性,除了应该定义外码,还应定对于参照
26、完整性,除了应该定义外码,还应定义义义义外码列是否允许空值外码列是否允许空值外码列是否允许空值外码列是否允许空值第31页,本讲稿共70页 在实现参照完整性时,系统除了应该提在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是供定义外码的机制,还应提供定义外码列是否允许空值的机制。否允许空值的机制。1.外码能否接受空值的问题外码能否接受空值的问题 第32页,本讲稿共70页ENO ENAMEESEXDNO1001张三张三男男0012105海胜海胜女女DNO DNAME LOC TEL001经理办经理办002市场部市场部003财务部财务部004职工表职工表职工表职工表部门表部门表
27、外码外码空值,可空值,可空值,可空值,可能符合语义能符合语义能符合语义能符合语义第33页,本讲稿共70页SNOCNOSCORE1001001781001003831002SNO SNAME SEX AGE1001张三张三1002李四李四2104王五王五2105赵六赵六成绩表成绩表学生表学生表外码外码外码外码空值,不空值,不空值,不空值,不符合语义符合语义符合语义符合语义第34页,本讲稿共70页2.2.可能破坏参照完整性的情况及违约处理可能破坏参照完整性的情况及违约处理被参照表被参照表被参照表被参照表(例如例如例如例如student)student)student)student)父表(父表(父
28、表(父表(parent table)parent table)parent table)parent table)参照表(例如参照表(例如参照表(例如参照表(例如SCoreSCoreSCoreSCore)子表(子表(子表(子表(child table)child table)child table)child table)违约处理违约处理违约处理违约处理可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性插入元组插入元组插入元组插入元组拒绝拒绝拒绝拒绝可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性修改外码值修改外码值修改外码值修改外码值拒绝拒绝拒绝
29、拒绝删除元组删除元组删除元组删除元组可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性拒绝拒绝拒绝拒绝/级连删除级连删除级连删除级连删除/置为空值置为空值置为空值置为空值修改主码值修改主码值修改主码值修改主码值可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性可能破坏参照完整性拒绝拒绝拒绝拒绝/级连修改级连修改级连修改级连修改/置为空值置为空值置为空值置为空值第35页,本讲稿共70页 在被参照关系中删除元组的问题在被参照关系中删除元组的问题 外码值与被参照关系删除元组的主码值外码值与被参照关系删除元组的主码值相同,这时可有三种不同的策略:相同,这时可有三种不同的策略:
30、级联删除(级联删除(CASCADESCASCADES)将参照关系中所有外码值与被参照将参照关系中所有外码值与被参照关系中要删除元组的主码值(父项)相关系中要删除元组的主码值(父项)相同的元组一起删除。如果参照关系同时同的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种又是另一个关系的被参照关系,则这种删除操作会继续级联下去。删除操作会继续级联下去。第36页,本讲稿共70页 限制删除(限制删除(RESTRICTRESTRICT)仅当参照关系中没有任何元组的外码仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值(父值与被参照关系中要删除元组的主码值(父项)相同时,系
31、统才执行删除操作,否则拒项)相同时,系统才执行删除操作,否则拒绝执行此删除操作。绝执行此删除操作。置空值删除(置空值删除(SET NULLSET NULL)删除被参照关系中的元组,并将参照删除被参照关系中的元组,并将参照关系中相应元组的外码值置成空值。关系中相应元组的外码值置成空值。第37页,本讲稿共70页 这三种方法究竟应采取哪一种方这三种方法究竟应采取哪一种方法,要依具体应用环境的语义来定。法,要依具体应用环境的语义来定。如在学生如在学生-选课数据库中,显然删除选课数据库中,显然删除学生信息时采用学生信息时采用“级联删除级联删除”方法是对方法是对的。因为当一个学生毕业或退学后,他的的。因为
32、当一个学生毕业或退学后,他的个人记录从个人记录从StudentStudent表中删除了,他的成绩表中删除了,他的成绩记录也应随之从记录也应随之从ScoreScore表中删除。表中删除。第38页,本讲稿共70页例:要删除例:要删除StudentStudent关系中关系中Sno=95001Sno=95001的元组,的元组,而而SCORESCORE关系中有关系中有4 4个元组的个元组的SnoSno都等于都等于9500195001。级联删除:级联删除:将将SCORESCORE关系中所有关系中所有4 4个个Sno=95001Sno=95001的元组一起删除。如果参照关系同的元组一起删除。如果参照关系同时
33、又是另一个关系的被参照关系,则这种删时又是另一个关系的被参照关系,则这种删除操作会继续级联下去除操作会继续级联下去第39页,本讲稿共70页 受限删除:受限删除:系统将拒绝执行此删除操作。系统将拒绝执行此删除操作。置空值删除:置空值删除:将将SCORESCORE关系中所有关系中所有Sno=95001Sno=95001的元组的的元组的SnoSno值置为空值。值置为空值。在学生选课数据库中,显然第一种方法和在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用第二种方法都是对的。第三种方法不符合应用环境语义。环境语义。第40页,本讲稿共70页 在参照关系中插入元组时的问题在参照
34、关系中插入元组时的问题 一般地,当参照关系一般地,当参照关系(子表)(子表)插入插入某个元组,依据被参照关系某个元组,依据被参照关系(父表)(父表)的的情况,这时可以有以下策略:情况,这时可以有以下策略:第41页,本讲稿共70页 限制插入限制插入 仅当被参照关系中存在相应的元组,其仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝执行此操作。系统才执行插入操作,否则拒绝执行此操作。递归插入递归插入(仅是理论上)(仅是理论上)首先向被参照关系中插入相应的元组,首先向被参照关系中插入相应的元组,其主码值等于
35、参照关系插入元组的外码值,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。然后向参照关系插入元组。第42页,本讲稿共70页例:向例:向SCORESCORE关系插入(关系插入(9900199001,001001,9090)元组,)元组,而而StudentStudent关系中尚没有关系中尚没有Sno=99001Sno=99001的学生的学生 受限插入:受限插入:系统将拒绝向系统将拒绝向SCORESCORE关系插入关系插入(9900199001,001001,9090)元组)元组 递归插入:递归插入:系统将首先向系统将首先向StudentStudent关系关系插入插入Sno=99001
36、Sno=99001的元组,然后向的元组,然后向SCORESCORE关系关系插入(插入(9900199001,001001,9090)元组。)元组。第43页,本讲稿共70页 修改被参照关系时的问题修改被参照关系时的问题 不允许修改主码值不允许修改主码值 在有些在有些RDBMSRDBMS中,修改主码值的操作时不中,修改主码值的操作时不允许的。如果需要修改主码值,只能先删除该允许的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关元组,然后再把具有新主码值的元组插入到关系中。系中。允许修改主码值允许修改主码值 在有些在有些RDBMSRDBMS中,允许修改关系的主中,允许修改关
37、系的主码值,但必须保证主码值的唯一性和非空,码值,但必须保证主码值的唯一性和非空,否则拒绝修改。分否则拒绝修改。分两种情况两种情况:第44页,本讲稿共70页 必须检查参照关系,是否存在这样的元必须检查参照关系,是否存在这样的元组,其外码值等于被参照关系要修改的主码组,其外码值等于被参照关系要修改的主码值。这时可以有值。这时可以有级联修改、拒绝修改、置级联修改、拒绝修改、置空值修改空值修改三种策略加以选择三种策略加以选择第45页,本讲稿共70页 级联修改级联修改 修改被参照关系中主码值同时,用相同的修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。方法修改参照关系中相应的外码值
38、。受限修改受限修改 拒绝此修改操作。只当参照关系中没有任拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。主码值时,这个元组的主码值才能被修改。置空值修改置空值修改 修改被参照关系中主码值,同时将参照关系中修改被参照关系中主码值,同时将参照关系中修改被参照关系中主码值,同时将参照关系中修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。相应的外码值置为空值。相应的外码值置为空值。相应的外码值置为空值。第46页,本讲稿共70页 例:将例:将StudentStudent关系中关系中Sn
39、o=95001Sno=95001的元组的元组中中SnoSno值改为值改为9612396123。而。而SCORESCORE关系中有关系中有4 4个个元组的元组的Sno=95001Sno=95001 级联修改:级联修改:将将SCORESCORE关系中关系中4 4个个Sno=95001Sno=95001元组中的元组中的SnoSno值也改为值也改为9612396123。如果参照关系。如果参照关系同时又是另一个关系的被参照关系,则这种同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。修改操作会继续级联下去。第47页,本讲稿共70页 受限修改:受限修改:只有只有SCORESCORE中没有任何元
40、组的中没有任何元组的Sno=95001Sno=95001时,才能修改时,才能修改StudentStudent表中表中Sno=95001Sno=95001的元组的的元组的SnoSno值改为值改为9612396123。置空值修改:置空值修改:将将StudentStudent表中表中Sno=95001Sno=95001的的元组的元组的SnoSno值改为值改为9612396123。而将。而将StudentStudent表中表中所有所有Sno=95001Sno=95001的元组的的元组的SnoSno值置为空值。值置为空值。在学生选课数据库中只有第一种方法是在学生选课数据库中只有第一种方法是正确的。正确的
41、。第48页,本讲稿共70页与在子表插入元组时的问题类似与在子表插入元组时的问题类似 必须检查被参照关系,是否存在这样的必须检查被参照关系,是否存在这样的元组,其主码值等于被参照关系要修改的外元组,其主码值等于被参照关系要修改的外码值。这时可以有码值。这时可以有限制插入、递归插入限制插入、递归插入两种两种策略加以选择。策略加以选择。修改参照关系时的问题修改参照关系时的问题第49页,本讲稿共70页RDBMSRDBMS在实现参照完整性在实现参照完整性 需要向用户提供定义主码、外码的需要向用户提供定义主码、外码的机制机制 向用户提供按照自己的应用要求选择处向用户提供按照自己的应用要求选择处理依赖关系中
42、对应的元组的方法理依赖关系中对应的元组的方法 选择哪种策略,都要根据应用环境的要选择哪种策略,都要根据应用环境的要求确定。求确定。3.3.参照完整性的实现参照完整性的实现第50页,本讲稿共70页12.2.3 12.2.3 用户定义的完整性用户定义的完整性 用户定义的完整性就是针对用户定义的完整性就是针对某一具体应某一具体应用用的数据必须满足的语义要求的数据必须满足的语义要求 RDBMS RDBMS提供,而不必由应用程序承担提供,而不必由应用程序承担第51页,本讲稿共70页CREATE TABLE时定义时定义列值非空(列值非空(NOT NULLNOT NULL)列值唯一(列值唯一(UNIQUEU
43、NIQUE)检查列值是否满足一个布尔表达式(检查列值是否满足一个布尔表达式(CHECKCHECK)1.1.属性上的约束条件的定义属性上的约束条件的定义第52页,本讲稿共70页 不允许取空值不允许取空值 例例12.4 在定义在定义SC表时,说明表时,说明Sno、Cno、Grade属性不允许取空值。属性不允许取空值。CREATE TABLE ScoreCREATE TABLE Score (Sno CHAR(5)Sno CHAR(5),Cno CHAR(3)Cno CHAR(3),Score NUMBER(6,2)Score NUMBER(6,2)NOT NULLNOT NULL,PRIMARY
44、KEY(Sno PRIMARY KEY(Sno,Cno)Cno),/*/*如果在表级定义实体完整性,隐含了如果在表级定义实体完整性,隐含了如果在表级定义实体完整性,隐含了如果在表级定义实体完整性,隐含了SnoSno,CnoCno不不不不允许取空值,则在列级不允许取空值的定义就不必写了允许取空值,则在列级不允许取空值的定义就不必写了允许取空值,则在列级不允许取空值的定义就不必写了允许取空值,则在列级不允许取空值的定义就不必写了*/*/););););第53页,本讲稿共70页 列值唯一列值唯一 例例12.5 建立部门表建立部门表DEPT,要求部门名,要求部门名称称Dname列取值唯一,部门编号列取
45、值唯一,部门编号Deptno列为主码列为主码 CREATE TABLE DEPT CREATE TABLE DEPT (Deptno NUMERIC(2)(Deptno NUMERIC(2),Dname CHAR(9)Dname CHAR(9)UNIQUEUNIQUE,/*/*要求要求要求要求DnameDname列值唯一列值唯一列值唯一列值唯一*/*/Location CHAR(10)Location CHAR(10),PRIMARY KEY(Deptno)PRIMARY KEY(Deptno);第54页,本讲稿共70页 用用CHECKCHECK短语指定列值应该满足的条件短语指定列值应该满足的
46、条件 例例12.6 Student表的表的Ssex只允许取只允许取“男男”或或“女女”。CREATE TABLE Student CREATE TABLE Student (Sno CHAR(5)PRIMARY KEY (Sno CHAR(5)PRIMARY KEY,Sname CHAR(8)NOT NULL Sname CHAR(8)NOT NULL,Ssex CHAR(2)Ssex CHAR(2)CHECK(Ssex IN(CHECK(Ssex IN(男男男男,女女女女),/*/*性别属性性别属性性别属性性别属性SsexSsex只允许取只允许取只允许取只允许取 男男男男 或或或或 女女女女
47、*/*/Sage NUMBER(3)Sage NUMBER(3),Sdept CHAR(2)Sdept CHAR(2););第55页,本讲稿共70页F 插入元组或修改属性的值时,插入元组或修改属性的值时,RDBMSRDBMS检查检查属性上的约束条件是否被满足属性上的约束条件是否被满足F 如果不满足则操作被拒绝执行如果不满足则操作被拒绝执行2.2.属性上的约束条件检查和处理属性上的约束条件检查和处理第56页,本讲稿共70页F 在在CREATE TABLECREATE TABLE时可以用时可以用CHECKCHECK短语定短语定义元组上的约束条件,即义元组上的约束条件,即元组级的限制元组级的限制F
48、同属性值限制相比,元组级的限制可以同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件设置不同属性之间的取值的相互约束条件 3.3.元组上的约束条件的定义元组上的约束条件的定义第57页,本讲稿共70页 例例例例12.7 12.7 当学生的性别是男时,其名字不能以当学生的性别是男时,其名字不能以当学生的性别是男时,其名字不能以当学生的性别是男时,其名字不能以Ms.Ms.打打打打头。头。头。头。CREATE TABLE Student CREATE TABLE Student (Sno CHAR(5)(Sno CHAR(5),Sname CHAR(8)NOT NULL Sname
49、 CHAR(8)NOT NULL,Ssex CHAR(2)Ssex CHAR(2),Sage NUMBER(2)Sage NUMBER(2),Sdept CHAR(20)Sdept CHAR(20),PRIMARY KEY(Sno)PRIMARY KEY(Sno),CHECK(Ssex=CHECK(Ssex=女女女女 OR Sname NOT LIKE Ms.%)OR Sname NOT LIKE Ms.%)/*/*定义了元组中定义了元组中定义了元组中定义了元组中SnameSname和和和和 Ssex Ssex两个属性值之间的约束条两个属性值之间的约束条两个属性值之间的约束条两个属性值之间的约
50、束条件件件件*/*/);n n性别是女性的元组都能通过该项检查,因为性别是女性的元组都能通过该项检查,因为性别是女性的元组都能通过该项检查,因为性别是女性的元组都能通过该项检查,因为Ssex=Ssex=女女女女 成立;成立;成立;成立;n n当性别是男性时,要通过检查则名字一定不能以当性别是男性时,要通过检查则名字一定不能以当性别是男性时,要通过检查则名字一定不能以当性别是男性时,要通过检查则名字一定不能以Ms.Ms.打打打打头头头头第58页,本讲稿共70页F 插入元组或修改属性的值时,插入元组或修改属性的值时,RDBMSRDBMS检检查元组上的约束条件是否被满足查元组上的约束条件是否被满足F