20150105PPT 第5章数据库完整性_第1页
20150105PPT 第5章数据库完整性_第2页
20150105PPT 第5章数据库完整性_第3页
20150105PPT 第5章数据库完整性_第4页
20150105PPT 第5章数据库完整性_第5页
已阅读5页,还剩68页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中国人民大学信息学院数据库完整性第五章数据库完整性数据完整性的正确性意味着数据符合现实世界的语义,而反映当前实际情况的数据的兼容性意味着数据库中不同关系表中同一对象的数据是逻辑的。例如,学生的学生编号必须是唯一的性别。男女大学生的年龄必须是14到50之间的整数。学生选择的课程必须是学校提供的课程。学生所在的系必须是学校设立的系。数据库的完整性(续)。数据的完整性和安全性是两个不同概念数据的完整性,以防止数据库中非语义数据的存在。也就是说,防止数据库中不正确数据保护对象的存在:非语义和不正确数据的安全保护;保护数据库免受恶意破坏和非法访问保护对象:非法用户和非法操作;数据库完整性(续);为了保持数据库的完整性,数据库管理系统必须:1 .提供定义完整性约束的机制完整性约束,也称为完整性规则。这是数据库中的数据必须满足的语义约束条件。SQL标准使用一系列概念来描述完整性,包括关系模型的实体完整性、引用完整性和用户定义的完整性。这些完整性通常通过SQL数据定义语言语句来实现。数据库完整性(续)。2.提供完整性检查的方法。数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查。通常,检查是在执行INSERT、UPDATE和DELETE语句后开始的,也可以在提交事务时进行检查。数据库完整性(续)。3.默认处理。如果数据库管理系统发现用户的操作违反了完整性约束,它将采取一定的措施来拒绝(NOACTION)CASCADE操作并执行其他操作。第五章数据库完整性,5.1实体完整性5.2引用完整性5.3用户定义的完整性5.4完整性约束命名语句* 5.5域中的完整性限制5.6断言5.7触发5.8摘要,5.1实体完整性,5.1.1实体完整性定义5.1.2实体完整性检查和默认处理,5.1.1实体完整性定义,在关系模型的实体完整性创建表中,由单个属性组成的代码由PRIMARYKEY定义。有两种描述方法被定义为列级约束,被定义为表级约束。对于由多个属性组成的代码,只有一种描述方法被定义为表级约束。实体完整性定义(续)。示例5.1将学生表中的Sno属性定义为代码(1)在列级别定义主代码创建表学生(Snochar (9)主键,Snamecar (20)非空,SSEXCHAR (2),SAGE SMALLINT,SDEPTChar(20);实体完整性定义(续),(2)主要代码创建表学生(SNOCHAR (9),SNAMACHAR(20)不为空,SSEX CHAR (2),SAGE SMALLINT,SDEPTCHAR (20),主键(SNO)在表级定义;实体完整性定义(续),示例5.2系统控制表中的Sno和Cno属性组定义为代码创建表系统控制(SnO CHAR (9) NOT NULL,CNO CHAR (4) NOT NULL,GRADE SMALLINT,主键(SnO,CNO)/*主代码*/)只能在表级别定义;5.1实体完整性,5.1.1实体完整性定义5.1.2实体完整性检查和默认处理,5.1.2实体完整性检查和默认处理,当插入或更新主代码列时,关系数据库管理系统将根据实体完整性规则自动检查。包括以下步骤:检查主代码值是否唯一,如果不唯一则拒绝插入或修改,检查主代码的每个属性是否为空,如果只有一个为空则拒绝插入或修改,实体完整性检查和默认处理(续), 检查记录中的主代码值是否唯一的一种方法是扫描整个表,以顺序判断表中每个记录的主代码值是否与要插入到记录中的主代码值(或修改后的新主代码值)相同,实体完整性检查和默认处理(续),表扫描缺点耗时为了避免基本表的全表扫描, RDBMS核心通常会自动在主代码、实体完整性检查和默认处理(续)、B树索引上创建索引。例如,通过主代码索引,新插入记录的主代码值为25。从B树的根节点开始,搜索并读取三个节点:根节点(51)、中间节点(1230)和叶节点(152025)。 主代码值已经存在,不能插入此记录。第五章数据库完整性,5.1实体完整性5.2引用完整性5.3用户定义完整性5.4完整性约束命名语句*5.5域完整性限制5.6断言5.7触发5.8摘要,5.2引用完整性,5.2.1引用完整性定义,5.2.2引用完整性检查和默认处理,5.2.1引用完整性定义,关系模型引用完整性定义,在CREATETABLE中,使用FOREIGNKEY短语来定义哪些列是外来代码,使用REFERENCES短语来指示哪些表被这些外来代码引用,以及引用完整性定义(例如Sno和Cno通过分别参考学生表的主代码和课程表的主代码(示例5.3),定义了标准体系中的参照完整性创建表SC (SNOCHAR (9)不为空,CNOCHAR (4)不为空,等级小,主键(SNO,CNO)。/*在表级别定义实体完整性*/外键(SNO)引用学生(SNO),/*在表级别定义引用完整性*/外键(CNO)引用课程(CNO)/*定义引用完整性*/);5.2参照完整性,5.2.1参照完整性定义5.2.2参照完整性检查和默认处理,参照完整性检查和默认处理,一个参照完整性连接两个表中相应的元组,以添加、删除和修改被参照的表和参照表,这可能会破坏参照完整性,必须进行检查,参照完整性检查和默认处理(续),例如,表SC和Student有四种情况可能会破坏参照完整性。向表:SC中添加一个元组。元组的Sno属性值在表Student中找不到元组,并且其Sno属性值等于它。修改SC表中的元组。修改后,元组的Sno属性值在表Student中找不到元组,并且其Sno属性值等于它。参照完整性检查和默认处理(续)。例如,有四种可能违反表SC和表Student的引用完整性的情况(续)。从学生表中删除一个元组,导致SC表中某些元组的Sno属性值在学生表中找不到元组,并且其Sno属性值等于它。修改学生表中某个元组的Sno属性,导致SC表中某些元组的Sno属性的值在学生表中找不到元组,并且其Sno属性的值等于它。参照完整性检查和默认处理(续),表5.1可能违反参照完整性和默认处理,参照完整性检查和默认处理(续),参照完整性默认处理(1)不允许执行not。该策略通常被设置为默认策略(2)级联操作当删除或修改被引用表的元组(学生)导致与引用表(SC)不一致时,则删除或修改导致引用表中不一致的所有元组(3)被设置为空值(SET-NULL),并且当删除或修改被引用表的元组导致不一致时,导致引用表中不一致的所有元组的相应属性被设置为空值。例如,关于完整性检查和默认处理(续),以下两个相关学生(学生编号、姓名、性别、专业编号、年龄)专业(专业编号、专业名称)假设删除了专业表中的一个元组,并且专业编号为12。根据将专业号设置为空的策略,学生表中专业号=12的所有元组的专业号应设置为对应于空的含义:删除一个专业,该专业的所有学生都不确定其专业,并等待重新分配。外部代码、参照完整性检查和默认处理(续)。对于引用完整性,除了定义外部代码之外,它还应该定义外部代码列是否允许空值。请参考动画参照完整性中的第5.2节介绍A数据库系统,参考完整性检查和默认处理(续),示例5.4创建表SC(非空,一个明确说明参考完整性的默认处理示例。CnoCHAR(4)NOTNULL,gradesmalint,primarykey (sno,cno),foreign key(SnO)referencesstudent(SnO)OnDeleteChaskade/* cascade删除sc表中相应的元组*/updatecascade。/*级联更新SC表中的对应元组*/外键(cno)引用进程(CNO) ondeletenoaction/*拒绝删除*/ONUPDATECASCADE/*级联更新SC表中的对应元组*/)当更新进程表中的CNO时;第5章数据库完整性,5.1实体完整性,5.2引用完整性,5.3用户定义完整性,5.4完整性约束命名语句*5.5域完整性限制,5.6断言,5.7触发器,5.8摘要,5.3用户定义完整性,用户定义的完整性是:特定应用程序的数据必须满足的语义要求。关系数据库管理系统提供了一种机制来定义和检查用户定义的完整性。它不需要由应用程序承担。5.3用户定义的完整性,5.3.1属性约束,5.3.2元组约束,1。属性上的约束定义,当创建表时,属性上的约束列值被定义为非空。列值是UNIQUE。检查列值是否满足条件表达式(检查)。属性上约束的定义(续),(1)示例5.5不允许空值。定义供应链表时,声明Sno、Cno和等级属性不允许空值。创建表sc (snochar (9)不为空,cnochar (4)不为空,gradesmalintnotnull,primarykey (sno,cno),/*如果表级实体完整性的定义意味着Sno和Cno不允许空值,则列级不允许空值的定义可能不会写入*/);对属性的约束定义(续),(2)列值是唯一的示例5.6建立部门表,要求部门名称dname列值是唯一的,部门编号deptno列是创建表部门的主要代码(Deptno数值(2),Dnamechar (9)唯一不为空,/*要求Dname列值是唯一的,不能为空*/locatchar (10),主键(Deptno);属性约束的定义(续),(3)使用CHECK短语指定列值应满足示例5.7学生表中的Ssex只允许取“男性”或“女性”。创建表学生(snochar (9) primarykey,snamechar (8)不为空,Ssexcar (2)检查(ssexinin(男性,女性),/*性别属性ssex只允许男性或女性*/sageSallint,SDeptchar(20);属性约束的定义(续),示例5.8SC表的等级值应介于0和100之间。创建表sc (snochar (9),cnochar (4),gradesmalintcheck(等级=0,等级=100),/*等级值范围从0到100 */primarykey (sno,cno),foreignkey (sno)参考学生(sno),foreignkey (cno)参考课程(cno);当插入元组或修改属性值时,关系数据库管理系统检查是否满足对属性的约束,如果不满足,则拒绝操作,2。属性的约束检查和默认处理,5.3用户定义的完整性,5.3.1属性约束,5.3.2元组约束,1。元组约束的定义,当创建表时,CHECK短语可用于定义元组约束,即元组级约束可设置不同属性之间值的相互约束,与属性值约束相比,元组约束的定义(续),示例5.9当学生的性别为男性时,其名称不能以ms开头创建表学生(snochar (9)、Snamecar(8)不为空、Ssexcar (2)、sagesmallint、sdeptchar (20)、primarykey (sno)、check (ssex=女性或ORSnameNOTLIKEMs。%)/*定义元组中sname和ssex两个属性值之间的约束条件*/)。性别是能够通过考试的女性的元组,因为ssex=女性已经建立;当性别为男性时,名称不能以ms开头,如果选中,当约束条件检查和元组的默认处理插入元组或修改属性值时,关系数据库管理系统检查元组的约束条件是否满足,如果不满足,操作被拒绝。2.元组的约束条件检查和默认处理,第5章数据库完整性,5.1实体完整性5.2引用完整性5.3用户定义的完整性5.4完整性约束命名条款* 5.5域中的完整性限制5.6断言5.7触发器5.8摘要,5.4完整性约束命名条款,1。完整性约束命名子句约束包括非空、唯一、主键短语、外键短语、检查短语等。以及完整性约束命名条款(续),示例5.10建立学生登记表,要求学生编号在90000和99999之间,姓名不能为空,年龄小于30岁,性别只能为“男性”或“女性”。createTableStudent(s no numeric(6)CONSTRAINT 1 CHECK(s no between 90000 and 99999),SnameCHAR(20)CONSTRAINT 2 notnull,sageNumeric(3)CONSTRAINT 3 CHECK(Sage=3000);修改表中的完整性限制使用ALTERTABLE语句修改表中的完整性限制示例5.12删除示例5.10的学生表中的性别限制。alter

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论