版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库系统及应用第一页,共七十页,编辑于2023年,星期三
数据库的完整性(Integrity):
数据库的完整性是指保证数据库中数据的正确性(Correctness)、准确性(Accuracy)和有效性(Validity),防止不合语义的数据进入数据库。
第二页,共七十页,编辑于2023年,星期三例如:学生的年龄必须是整数,取值范围为14-29;学生的性别只能是男或女;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;第三页,共七十页,编辑于2023年,星期三为维护数据库的完整性,DBMS必须提供一种机制来检查数据库的完整性,看其是否满足语义规定的条件。DBMS中检查数据是否满足完整性条件的机制称为完整性检查。第四页,共七十页,编辑于2023年,星期三现代数据库技术采用对数据完整性的语义约束和检查来保护数据库的完整性,其实现方式有两种:一种是通过定义和使用完整性约束规则(系统定义),另一种是通过触发器(Trigger)和存储过程(StoredProcedure)(用户自定义)等过程来实现。第五页,共七十页,编辑于2023年,星期三
完整性子系统:负责处理数据库的完整性语义约束的定义和检查,防止因错误的更新操作产生的不一致性。用户可以使用完整性保护机制,对某些数据规定一些语义约束。当进行数据操作时,DBMS就由某个完整性语义约束的触发条件激发相应的检查程序,进行完整性语义约束检查。若发现错误的更新操作,立即采取措施处理,或是拒绝执行该更新操作,或是发出警告信息,或者纠正已产生的错误。第六页,共七十页,编辑于2023年,星期三DBMS的完整性子系统是负责数据库的完整性控制的。它具有3个功能:完整性约束条件定义机制完整性检查机制违约反应
第七页,共七十页,编辑于2023年,星期三完整性约束条件:数据模型的组成部分,约束数据库中数据的语义。DBMS应提供定义数据库完整性约束条件的机制,并把它们作为模式的一部分存入数据库中。一般由SQL的DDL语句来实现。
完整性约束条件定义机制第八页,共七十页,编辑于2023年,星期三检查用户发出的操作请求是否违背了完整性约束条件的方法
完整性检查机制第九页,共七十页,编辑于2023年,星期三如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作,如拒绝用户执行该操作,来保证数据的完整性。
违约反应第十页,共七十页,编辑于2023年,星期三12.1完整性规则数据库完整性子系统是根据“完整性规则集”工作的。完整性规则集包含一组完整性约束规则(IntegrityConstraint)。一个完整性约束规则包含完整性约束条件、规则的触发条件和“ELSE子句”。完整性检查是围绕完整性约束条件进行的,因此数据库的完整性约束条件是完整性控制机构的核心。第十一页,共七十页,编辑于2023年,星期三一个完整性约束条件可以看作是一个谓词(Predicate),所有正确的保持完整性的数据库状态都应当满足这个谓词。例如,SCORE.GRADE≥0。规则的触发条件规定何时使用该规则做检查。
“ELSE子句”规定当完整性约束条件不满足时须做的操作。第十二页,共七十页,编辑于2023年,星期三完整性约束条件作用的对象可以是关系、元组和列三种。
属性(列)约束:列的类型、取值范围、精度、排序等约束;
元组约束:元组中各个属性列间的联系的约束;
关系约束:若干元组间、关系集合上以及关系之间的联系的约束;第十三页,共七十页,编辑于2023年,星期三在关系数据库中,数据的完整性规则一般有以下类型。
域完整性规则:定义属性的取值范围;关系完整性规则:定义更新操作对数据库中的值的影响和限制;实体完整性约束:定义在一个关系中,主属性不能取空值参照完整性约束:定义在一个或多个关系中,属性值间的联系、影响和约束。第十四页,共七十页,编辑于2023年,星期三这些规则是用DDL描述的,一旦一条完整性规则输入给系统,系统就开始执行这条规则。这种方法的主要优点是由系统处理违反规则的情况,而不是由用户处理。其次,规则集中存放在数据字典中,当需要修改时,可以很方便地修改。第十五页,共七十页,编辑于2023年,星期三定义域约束规定某个属性的值必须符合某种数据类型并且取自某个数据定义域。域完整性约束施加于单个数据上。0≤人的年龄≤150仓库库存量≥00≤一个月的工作天数≤31长途电话号码格式为999-99999991.域完整性约束第十六页,共七十页,编辑于2023年,星期三对关系的完整性进行约束的主要目的是维持用户规定的函数依赖。例如,如果用户定义了下列函数依赖:NAME→ADDRESS。2.关系完整性约束第十七页,共七十页,编辑于2023年,星期三主码(主关键字)是实体完整性约束(EntityConstraint)。3.实体完整性约束第十八页,共七十页,编辑于2023年,星期三外码(外部关键字)是参照完整性约束(ReferentialConstraint)的一个典型例子。4.参照完整性约束第十九页,共七十页,编辑于2023年,星期三数据库的完整性约束可以分为两种类型。
静态约束(StaticConstraint)
动态约束(DynamicConstraint)第二十页,共七十页,编辑于2023年,星期三
静态约束:是对数据库状态的约束,即是指数据库每一确定状态时的数据对象所应满足的约束条件,反映数据库状态合理性的约束,这是最重要的一类完整性约束。例如,在一个人事管理数据库的任何一个状态都必须满足条件
“0≤人的年龄≤150”。
第二十一页,共七十页,编辑于2023年,星期三动态约束:是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,反映数据库状态变迁的约束。例如,一个人的年龄只会增加,不会减少,更新年龄数据时必须满足此约束。第二十二页,共七十页,编辑于2023年,星期三在关系系统中,最重要的完整性约束是实体完整性约束和参照完整性约束,其他完整性约束条件则可以归入用户定义的完整性约束。对于违反实体完整性和用户定义的完整性操作一般都采用拒绝执行的方式进行处理,而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。12.2完整性控制机制第二十三页,共七十页,编辑于2023年,星期三关系模型的实体完整性CREATETABLE中用PRIMARYKEY定义单属性构成的码有两种说明方法定义为列级约束条件定义为表级约束条件对多个属性构成的码只有一种说明方法定义为表级约束条件
12.2.1实体完整性第二十四页,共七十页,编辑于2023年,星期三例12.1将Student表中的Sno属性定义为码(1)在列级定义主码
CREATETABLEStudent
(SnoCHAR(5)PRIMARYKEY,
SnameCHAR(20)NOTNULL,
SsexCHAR(2),
SageNUMBER(2),
SdeptCHAR(2));第二十五页,共七十页,编辑于2023年,星期三(2)在表级定义主码
CREATETABLEStudent
(SnoCHAR(5),
SnameCHAR(20)NOTNULL,
SsexCHAR(2),
SageNUMBER(2),
SdeptCHAR(2),
PRIMARYKEY(Sno)
);第二十六页,共七十页,编辑于2023年,星期三例12.2将SCore表中的Sno,Cno属性组定义为码。CREATETABLESCORE
(SnoCHAR(5),/*
NOTNULL
*/
CnoCHAR(3),/*
NOTNULL
*/
ScoreNUMBER(6,2),
PRIMARYKEY(Sno,Cno)
/*只能在表级定义主码*/
);第二十七页,共七十页,编辑于2023年,星期三插入或对主属性列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:检查主码值是否唯一,如果不唯一则拒绝插入或修改检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改第二十八页,共七十页,编辑于2023年,星期三12.2.2参照完整性关系模型的参照完整性在CREATETABLE中用FOREIGNKEY短语定义哪些列为外码用REFERENCES短语指明这些外码参照哪些表的主码第二十九页,共七十页,编辑于2023年,星期三例如,关系SCore中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码。例12.3定义SCore中的参照完整性CREATETABLEScore
(SnoCHAR(5),
CnoCHAR(3),
ScoreNUMBER(6,2),
PRIMARYKEY(Sno,Cno),/*在表级定义实体完整性*/
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
/*在表级定义参照完整性*/
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
/*在表级定义参照完整性*/);第三十页,共七十页,编辑于2023年,星期三参照完整性违约处理拒绝(RESTRICT)执行默认策略级联(CASCADE)操作设置为空值(SETNULL)对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值第三十一页,共七十页,编辑于2023年,星期三
在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允许空值的机制。1.外码能否接受空值的问题
第三十二页,共七十页,编辑于2023年,星期三ENOENAMEESEXDNO1001张三男001…………2105海胜女…………DNODNAMELOCTEL001经理办002市场部……003财务部004………职工表部门表外码空值,可能符合语义第三十三页,共七十页,编辑于2023年,星期三SNOCNOSCORE1001001781001……003831002……SNOSNAMESEXAGE1001张三1002李四……2104王五2105赵六……成绩表学生表外码空值,不符合语义第三十四页,共七十页,编辑于2023年,星期三2.可能破坏参照完整性的情况及违约处理被参照表(例如student)父表(parenttable)
参照表(例如SCore)子表(childtable)
违约处理可能破坏参照完整性插入元组拒绝可能破坏参照完整性修改外码值拒绝删除元组可能破坏参照完整性拒绝/级连删除/置为空值修改主码值可能破坏参照完整性拒绝/级连修改/置为空值第三十五页,共七十页,编辑于2023年,星期三在被参照关系中删除元组的问题
外码值与被参照关系删除元组的主码值相同,这时可有三种不同的策略:
①级联删除(CASCADES)
将参照关系中所有外码值与被参照关系中要删除元组的主码值(父项)相同的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。第三十六页,共七十页,编辑于2023年,星期三
②限制删除(RESTRICT)
仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值(父项)相同时,系统才执行删除操作,否则拒绝执行此删除操作。③置空值删除(SETNULL)
删除被参照关系中的元组,并将参照关系中相应元组的外码值置成空值。第三十七页,共七十页,编辑于2023年,星期三这三种方法究竟应采取哪一种方法,要依具体应用环境的语义来定。如在学生-选课数据库中,显然删除学生信息时采用“级联删除”方法是对的。因为当一个学生毕业或退学后,他的个人记录从Student表中删除了,他的成绩记录也应随之从Score表中删除。第三十八页,共七十页,编辑于2023年,星期三例:要删除Student关系中Sno=95001的元组,而SCORE关系中有4个元组的Sno都等于95001。级联删除:将SCORE关系中所有4个Sno=95001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去第三十九页,共七十页,编辑于2023年,星期三
受限删除:系统将拒绝执行此删除操作。置空值删除:将SCORE关系中所有Sno=95001的元组的Sno值置为空值。在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。第四十页,共七十页,编辑于2023年,星期三在参照关系中插入元组时的问题
一般地,当参照关系(子表)插入某个元组,依据被参照关系(父表)的情况,这时可以有以下策略:第四十一页,共七十页,编辑于2023年,星期三
①限制插入
仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝执行此操作。
②递归插入(仅是理论上)
首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。第四十二页,共七十页,编辑于2023年,星期三例:向SCORE关系插入(99001,001,90)元组,而Student关系中尚没有Sno=99001的学生
受限插入:系统将拒绝向SCORE关系插入(99001,001,90)元组递归插入:系统将首先向Student关系插入Sno=99001的元组,然后向SCORE关系插入(99001,001,90)元组。第四十三页,共七十页,编辑于2023年,星期三修改被参照关系时的问题
①不允许修改主码值
在有些RDBMS中,修改主码值的操作时不允许的。如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。②允许修改主码值
在有些RDBMS中,允许修改关系的主码值,但必须保证主码值的唯一性和非空,否则拒绝修改。分两种情况:第四十四页,共七十页,编辑于2023年,星期三必须检查参照关系,是否存在这样的元组,其外码值等于被参照关系要修改的主码值。这时可以有级联修改、拒绝修改、置空值修改三种策略加以选择第四十五页,共七十页,编辑于2023年,星期三级联修改修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。受限修改拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。置空值修改修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。第四十六页,共七十页,编辑于2023年,星期三
例:将Student关系中Sno=95001的元组中Sno值改为96123。而SCORE关系中有4个元组的Sno=95001级联修改:将SCORE关系中4个Sno=95001元组中的Sno值也改为96123。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。第四十七页,共七十页,编辑于2023年,星期三
受限修改:只有SCORE中没有任何元组的Sno=95001时,才能修改Student表中Sno=95001的元组的Sno值改为96123。
置空值修改:将Student表中Sno=95001的元组的Sno值改为96123。而将Student表中所有Sno=95001的元组的Sno值置为空值。在学生选课数据库中只有第一种方法是正确的。第四十八页,共七十页,编辑于2023年,星期三与在子表插入元组时的问题类似必须检查被参照关系,是否存在这样的元组,其主码值等于被参照关系要修改的外码值。这时可以有限制插入、递归插入两种策略加以选择。修改参照关系时的问题第四十九页,共七十页,编辑于2023年,星期三RDBMS在实现参照完整性需要向用户提供定义主码、外码的机制向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法选择哪种策略,都要根据应用环境的要求确定。3.参照完整性的实现第五十页,共七十页,编辑于2023年,星期三12.2.3用户定义的完整性用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求RDBMS提供,而不必由应用程序承担第五十一页,共七十页,编辑于2023年,星期三CREATETABLE时定义列值非空(NOTNULL)列值唯一(UNIQUE)检查列值是否满足一个布尔表达式(CHECK)1.属性上的约束条件的定义第五十二页,共七十页,编辑于2023年,星期三⑴不允许取空值
例12.4在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。
CREATETABLEScore
(SnoCHAR(5),
CnoCHAR(3),
ScoreNUMBER(6,2)NOTNULL,
PRIMARYKEY(Sno,Cno),
/*如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了*/
);第五十三页,共七十页,编辑于2023年,星期三⑵列值唯一例12.5建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATETABLEDEPT
(DeptnoNUMERIC(2),
DnameCHAR(9)UNIQUE,/*要求Dname列值唯一*/
LocationCHAR(10),
PRIMARYKEY(Deptno)
);第五十四页,共七十页,编辑于2023年,星期三⑶用CHECK短语指定列值应该满足的条件例12.6Student表的Ssex只允许取“男”或“女”。CREATETABLEStudent
(SnoCHAR(5)PRIMARYKEY,
SnameCHAR(8)NOTNULL,
SsexCHAR(2)CHECK(SsexIN(‘男’,‘女’)),
/*性别属性Ssex只允许取‘男’或‘女’*/
SageNUMBER(3),
SdeptCHAR(2)
);第五十五页,共七十页,编辑于2023年,星期三插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足如果不满足则操作被拒绝执行2.属性上的约束条件检查和处理第五十六页,共七十页,编辑于2023年,星期三在CREATETABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件3.元组上的约束条件的定义第五十七页,共七十页,编辑于2023年,星期三例12.7当学生的性别是男时,其名字不能以Ms.打头。CREATETABLEStudent
(SnoCHAR(5),
SnameCHAR(8)NOTNULL,
SsexCHAR(2),
SageNUMBER(2),
SdeptCHAR(20),
PRIMARYKEY(Sno),
CHECK(Ssex=‘女’ORSnameNOTLIKE‘Ms.%’)
/*定义了元组中Sname和Ssex两个属性值之间的约束条件*/
);性别是女性的元组都能通过该项检查,因为Ssex=‘女’成立;当性别是男性时,要通过检查则名字一定不能以Ms.打头第五十八页,共七十页,编辑于2023年,星期三插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足如果不满足则操作被拒绝执行4.元组上的约束条件检查和违约处理第五十九页,共七十页,编辑于2023年,星期三除此之外,还可以通过定义触发器来实现其他完整性规则。用触发器可定义很复杂的完整性约束条件。一旦某一用户定义了一个完整性约束条件检查的触发器,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发器,在核心层进行集中的完整性控制。第六十页,共七十页,编辑于2023年,星期三12.3完整性约束命名子句SQL3主张显式命名所有的约束。约束可以命名,以便引用。约束的命名使用保留字CONSTRAINT。CONSTRAINT<完整性约束条件名>[PRIMARYKEY短语|FOREIGNKEY短语|UNIQUE|CHECK短语]1.CONSTRAINT约束命名第六十一页,共七十页,编辑于2023年,星期三例12.8建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。
CREATETABLEStudent
(SnoCHAR(5)
CONSTRAINTC1CHECK(SnoBETWEEN90000AND99999),
SnameCHAR(20)CONSTRAINTC2NOTNULL,
SageNUMBER(3)CONSTRAINTC3CHECK(Sage<30),
SsexCHAR(2)
CONSTRAINTC4CHECK(SsexIN(‘男’,‘女’)),
CONSTRAINTStudentKeyPRIMARYKEY(Sno)
);在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。第六十二页,共七十页,编辑于2023年,星期三使用ALTERTABLE语句修改表中的完整性约束2.修改表中的完整性限制第六十三页,共七十页,编辑于2023年,星期三例12.9修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40。可以先删除原来的约束条件,再增加新的约束条件
ALTERTABLEStudent
DROPCONSTRAINTC1;
ALTERTABLEStudent
ADDCONSTRAINTC1CHECK(SnoBETWEEN900000AND999999),ALTERTABLEStudent
DROPCONSTRAINTC3;
ALTERTABLEStudent
ADDCONSTRAINTC3CHECK(Sage<40);第六十四页,共七十页,编辑于2023年,星期三12.4ORACLE的完整性约束Oracle在CREATETABLE语句中提供了PRIMARYKEY子句,供用户在建表时指定关系中的主关键字列。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年能力评估师培训
- 产业基金与PPP融资精要
- 《GB-T 37076-2018信息安全技术 指纹识别系统技术要求》专题研究报告
- 《GBT 34690.2-2017 印刷技术 胶印数字化过程控制 第 2 部分:作业环境》专题研究报告
- 《GBT 30457-2013灯用稀土紫外发射荧光粉试验方法》专题研究报告
- 企业年报信息编制咨询服务合同
- 中式面点师技师(高级)考试试卷及答案
- 助听器验配师技师(初级)考试试卷及答案
- 甲状腺切除护理查房
- PICC护理中的无菌操作
- 2025年10月自考04184线性代数经管类试题及答案含评分参考
- 国开2025年秋《心理学》形成性考核练习1-6答案
- 科技研发项目管理办法
- 个体诊所药品清单模板
- 267条表情猜成语【动画版】
- 地图文化第三讲古代测绘课件
- LY/T 2230-2013人造板防霉性能评价
- GB/T 34891-2017滚动轴承高碳铬轴承钢零件热处理技术条件
- 国家开放大学电大本科《理工英语4》2022-2023期末试题及答案(试卷号:1388)
- 突发公共卫生事件处置记录表
- 扑救初期火灾的程序和措施
评论
0/150
提交评论