数据库系统概论之数据库完整性课件

举报
资源描述
什么是数据库的完整性数据的正确性和相容性防止不合语义的数据进入数据库。关注 是否真实地反映现实世界例:学生的年龄必须是整数,取值范围为14-29;学生的性别只能是男或女;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;v提纲5.1 实体完整性5.2 参照完整性5.3 用户定义完整性5.4 完整性约束命名子句5.5 触发器03.10.20221数据库的完整性与安全性区别和联系n两个不同的概念,但有一定的联系;前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,既所谓的垃圾进垃圾出(Garbage in Garbage out)所造成的无效操作和错误结果;后者是保护数据库防止恶意的破坏和非法存取;安全性措施防范的对象是非法用户,完整性措施的防范对象是不合语义的数据.n完整性控制机制1.完整性约束条件定义机制2.完整性检查机制3.违约处理03.10.20222完整性约束条件定义v完整性约束条件:数据模型的组成部分约束数据库中数据的语义vDBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中03.10.20223完整性检查机制v检查用户发出的操作请求是否违背了完整性约束条件 03.10.20224违约处理v如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。03.10.20225完整性约束条件完整性约束条件作用的对象v列:对属性的取值类型、范围、精度等的约束条件v元组:对元组中各个属性列间的联系的约束v关系:对若干元组间、关系集合上以及关系之间的联系的约束03.10.20226完整性约束条件(续)v静态对静态对象的约束是反映数据库状态合理性的约束v动态对动态对象的约束是反映数据库状态变迁的约束03.10.20227完整性约束条件分类六类完整性约束条件v 静态列级约束v 静态元组约束v 静态关系约束v 动态列级约束v 动态元组约束v 动态关系约束03.10.20228完整性约束条件(续)1.静态列级约束v静态列级约束:对的取值域的说明v最常见、最简单、最容易实现的一类完整性约束03.10.20229完整性约束条件(续)v五类静态列级约束1)数据类型约束:数据的类型、长度、单位、精度等 例:学生姓名的数据类型为字符型,长度为82)对数据格式的约束例:学号:前两位表示入学年份,后四位为顺序编号 日期:YY.MM.DD。03.10.202210补充:完整性约束条件(续)3)取值范围或取值集合的约束例:规定成绩的取值范围为0-100 年龄的取值范围为14-29 性别的取值集合为男,女4)对空值的约束 空值:未定义或未知的值 空值:与零值和空格不同 有的列允许空值,有的则不允许,如成绩可为空值5)其他约束例:关于列的排序说明,组合列等03.10.202211补充:完整性约束条件(续)2.静态元组约束 规定元组的各个列之间的约束关系例:订货关系中发货量=700元 静态元组约束只局限在元组上 03.10.202212补充:完整性约束条件(续)3.静态关系约束 关系的各个元组之间或若干关系之间存在的各种联系或约束 常见静态关系约束:1)实体完整性约束2)参照完整性约束3)函数依赖约束4)统计约束03.10.202213统计约束v定义某个字段值一个关系多个元组的统计值之间的约束关系v例:职工平均工资的2倍=部门经理的工资=原来工资 年龄只能增长03.10.202216完整性约束条件(续)5.动态元组约束 修改元组值:各个字段之间要满足的约束条件例:职工工资调整不得低于其原来工资+工龄*1.503.10.202217完整性约束条件(续)6.动态关系约束 关系变化前后状态:限制条件例:事务一致性、原子性等约束条件03.10.2022185.1 实体完整性5.1.1 实体完整性定义5.1.2 实体完整性检查和违约处理03.10.2022195.1.1 实体完整性定义v实体完整性(Entity Integrity)若属性A是基本关系R的主属性,则属性A不能取空值例SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)POSTGRADUATE属性为主码(假设研究生不会重名),则其不能取空值03.10.2022205.1.1 实体完整性定义关系模型必须遵守实体完整性规则的原因v实体完整性规则是针对基本关系而言的。v一个基本表通常对应现实世界的一个实体集或多对多联系。(2)现实世界中的实体和实体间的联系都是可区分的,即它们具有某种唯一性标识。(3)关系模型中以主码作为唯一性标识。(4)主码中的属性即主属性不能取空值。空值就是“不知道”或“无意义”的值。主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性。03.10.2022215.1.1 实体完整性定义关系模型的实体完整性在Create table 中用 Primary Key定义。对单属性的构成的码有两种说明方法:定义为列级约束条件表级约束条件对多个属性构成的码只有一种说明方法,即定义为表级约束条件03.10.202222例题1将Student表中的Sno属性定义为码。Create table student (Sno char(9)primary key,/*在列级定义主码*/Sname char(20)not null,Ssex char(2),Sage smallint,Sdept char(20);5.1.1 实体完整性定义03.10.2022235.1.1 实体完整性定义或者Create table student (sno char(9),Sname char(20)not null,Ssex char(2),Sage smallint,Sdept char(20),primary key(sno),/*在表级定义主码*/);03.10.2022245.1.1 实体完整性定义例题2 将SC表中的Sno,Cno属性组定义为码 Create table SC (Sno char(9)not null,Cno char(4)not null,grade smallint,Primary key(Sno,Cno),/*只能在表级定义主码*/);03.10.2022255.1.2 实体完整性检查和违约处理v用primary key 短语定义了关系的主码后,每当应用程序对基本表插入一条记录或者对主码列进行更新操作时,RDBMS将自动检查:检查主码值是否唯一,如果不唯一则拒绝插入或修改。检查主码地各个属性是否为空,只要一个为空就拒绝插入或修改03.10.2022265.1.2 实体完整性检查和违约处理v检查主码值是否唯一的方法(2种):全表扫描03.10.2022275.1.2 实体完整性检查和违约处理v全表扫描缺点:耗时03.10.2022285.1.2 实体完整性检查和违约处理v第二种方法:建索引(如B+树索引)255112 3066 7815 20 253 730 4168 69 71 7679 84 9351 54 65新插入记录的新插入记录的主码值主码值03.10.2022295.1.2 实体完整性检查和违约处理vRDBMS核心一般都在主码上自动建立一个索引v通过索引查找基本表中是否存在新的主码值 提高效率03.10.2022305.2 参照完整性5.2.1 参照完整性定义5.2.2 参照完整性检查和违约处03.10.2022315.2.1 参照完整性定义v关系模型的参照完整性在Create table中用foreign key 短语定义哪些列为外码。03.10.2022325.2.1 参照完整性定义例题3 定义SC中的参考完整性。Create table sc (sno char(9)not null,cno char(4)not null,grade smallint,Primary key(sno,cno),/*在表级定义实体完整性*/foreign key(sno)references student(sno),/*在表级定义 参照完整性*/foreign key(Cno)references student(Cno),/*在表级定义 参照完整性*/);03.10.2022335.2.2 参照完整性检查和违约处理参照完整性将两个表中的相应元组联系起来后。当进行增删操作时有可能破坏参照完整性,必须进行检查。03.10.2022345.2.2 参照完整性检查和违约处理v对SC和Students有4种可能破坏参照完整性的情况:SC表中增加一个元组,该元组的Sno 属性值在Students中找不到一个元组,其Sno属性的值与之相等。修改SC表中的一个元组,修改后该元组的Sno属性在Students中找不到一个元组,其Sno属性值与之相等。从Students表中删除一个元组,造成SC表中某些元组的Sno属性值在Students中找不到一个元组,其Sno属性值与之相等。修改Students表中的一个元组的Sno属性,造成SC表中某些元组的Sno属性值在Students中找不到一个元组,其Sno属性值与之相等03.10.202235表5.1 可能破坏参照完整性的情况及违约处理03.10.202236处理策略1、拒绝(No action)执行不允许该操作执行。该策略一般为默认策略。2、级联(Cascade)操作当删除或修改被参照表(Students)的一个元组造成了与参照表(SC)的不一致,则删除或修改参照表中的所有造成不一致的元组。例如,删除Students表中的元组,Sno值为200215121则要从SC表中级联删除SC.Sno=200215121的所有元组。3、设置空值(Set-Null)例如:学生(学号,姓名,性别,专业号,年龄)专业(专业号,专业名)专业号可以取空值 但在学生-选课数据库中,Students关系为被参照关系,其主码为Sno,SC为参考关系,Sno为外码。若SC的Sno为空值,则表明。03.10.202237处理策略若违反了参照完整性,系统选用默认策略,即拒绝执行。如果想让系统采用其他策略则必须在创建表的时候显式地加以说明。03.10.202238例题4 显式说明参照完整性的违约处理Create table SC (sno char(9)not null,cno char(4)not null,grade smallint,Primary key(sno,cno),/*在表级定义实体完整性*/foreign key(sno)references student(sno),/*在表级定义参照完整性*/on delete cascade/*当删除student表中的元组时,级联删除SC表中的相应元组*/on update cascade,/*当更新student表中的Sno时,级联更新SC表中的相应元组*/foreign key(sno)references courses(sno),/*在表级定义参照完整性*/on delete no Action/*当删除courses表中的元组时造成了与SC表不一致拒绝删除*/on update cascade );03.10.2022395.3 用户定义完整性5.3.1 属性上的约束条件的定义5.3.2 属性上的约束条件检查和违约处理5.3.3 元组上的约束条件的定义5.3.4 元组上的约束条件检查和违约处理03.10.2022405.3.1 属性上的约束条件的定义v属性值的限制,包括:列值非空(Not null 短语)列值唯一(unique短语)检查列值是否满足一个布尔表达式(Check 短语)03.10.2022415.3.1 属性上的约束条件的定义1、不允许取空值例题5 在定义SC表时,说明Sno,Cno,Grade属性不允许取空值。Create table SC (Sno char(9)not null,Cno char(40)not null,Grade sma
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 办公文档 > 教学/培训


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号