预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共33页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

数据库完整性数据库的完整性为了维护数据库的完整性,DBMS必须能够: 1.提供定义完整性约束条件的机制 完整性约束条件:加在数据库数据之上的语义约束条件 DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中 2.提供完整性检查的方法 检查用户发出的操作请求是否违背了完整性约束条件 3.违约反应 如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。理清安全性和完整性的区别 完整性和安全性是两个不同的概念。前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出造成的无效操作和错误结果,而后者是防止数据库被恶意的破坏和非法的存取。 当然,完整性和安全性是密切相关的。特别是从系统实现的方法来看,某一种机制常常既可以用于安全保护亦可用于完整性保证。为什么要学习数据库完整性实体完整性 参照完整性 用户定义的完整性5.1实体完整性实体完整性关系模型的实体完整性在CREATETABLE中用PRIMARYKEY定义。 对单属性构成的码有两种说明方法,一种是定义为列级约束条件,另一种是定义为表级约束条件。 对多个属性构成的码只有一种说明方法,即定义为表级约束条件。定义举例定义举例例2 CREATETABLESC (SnoCHAR(9)NOTNULL CnoCHAR(9)NOTNULL GradeSMALLINT, PRIMARYKEY(Sno,Cno) ); 只能在表级定义!实体完整性检查和违约处理检查主码方法: 检查记录中的主码是否唯一的一种方法是进行全表扫描,依次判断表中的每一条记录。 由于全表扫描十分耗时,所以关系数据库DBMS一般在主码上自动建立一个索引,通过索引进行判断,如此提高了效率。Keyi255.2参照完整性外键的约束关系模型的参照完整性定义 在CREATETABLE中用FOREIGNKEY短语定义 哪些列为外码 用REFERENCES短语指明这些外码参照哪些 表的主码例如:选课表SC中表示一个学生选修的某门课程的成绩,需要知道学生的学号Sno和其选修的课程Cno,(Sno,Cno)是主码。Sno,Cno分别参照引用学生表S的主码和课程表C的主码。参照完整性将两个表中的相应元组联系起来。因此,对被参照表和参照表进行增、删、改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。例:在选课表中[学号]列上建立外键的作用5.2.2参照完整性检查和违约处理 5.2.2参照完整性检查和违约处理 当上述破坏参照完整性的情况发生时,系统可以采用以下策略加以处理: (1)拒绝(NOACTION)执行 ——默认策略 (2)级联(CASCADE)操作 (3)设置为空值(2)级联(CASCADE)操作 当删除或修改被参照表的一个元组导致与参照表的不一致时,删除或修改参照表中的所有导致不一致的元组。(3)设置为空值 当删除或修改被参照表(如SC表)的一个元组时造成的不一致,则将参照表(如S表、C表)中的造成不一致的元组的对应属性设置为空值。 思考:外码能否接受空值? /*在表级定义实体完整性*/ PRIMARYKEY(Sno,Cno) 思考:外码能否接受空值? 外码是参照表的主属性,按照实体完整性主码不能为空。若为空,则表明这是尚不存在于被参照表中的关系。 因此对于还需定义外码列是否为空值。 一般的,当对参照表和被参照表的操作违反了参照完整性时,系统选用默认策略——拒绝执行 如果想让系统采用其他策略则必须在创建参照表时现实的加以说明。 以学生选课为例: ONDELETECASCADE 删除被参照表S中元组时,级联删除参照表SC中 相应元组 ONUPDATECASCADE 更新被参照表S中元组时,级联更新参照表SC中 相应元组 ONDELETENOACTION 删除被参照表S中元组造成与参照表SC不一致时,拒绝删除 从以上内容可以看到,关系数据库管理系统在实现参照完整性时,除了要提供定义主码、外码机制外,还需要提供不同的策略供用户选择,具体选择那种策略,要根据应用的环境要求确定。 CREATETABLESC (SnoCHAR(9)NOTNULL, CnoCHAR(4)NOTNULL, GradeSMALLINT, PRIMARYKEY(Sno,Cno),/*在表级定义实体完整性*/ FOREIGNKEY(Sno)REFERENCESS(Sno) /*在表级定义参照完整性*/ ONDELETECASCADE /*当删除S表中元组时,级联删除SC表中相应的元组*/ ONUPDATECASCADE, /*当更新S表中元组时,级联更新SC表中相应的元组*/ FOREIGNKEY(Cno)REFERENCESC(Cno