大数据库原理大数据地完整性实验报告材料.docx

上传人:b****4 文档编号:4683368 上传时间:2022-12-07 格式:DOCX 页数:16 大小:267.90KB
下载 相关 举报
大数据库原理大数据地完整性实验报告材料.docx_第1页
第1页 / 共16页
大数据库原理大数据地完整性实验报告材料.docx_第2页
第2页 / 共16页
大数据库原理大数据地完整性实验报告材料.docx_第3页
第3页 / 共16页
大数据库原理大数据地完整性实验报告材料.docx_第4页
第4页 / 共16页
大数据库原理大数据地完整性实验报告材料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

大数据库原理大数据地完整性实验报告材料.docx

《大数据库原理大数据地完整性实验报告材料.docx》由会员分享,可在线阅读,更多相关《大数据库原理大数据地完整性实验报告材料.docx(16页珍藏版)》请在冰豆网上搜索。

大数据库原理大数据地完整性实验报告材料.docx

大数据库原理大数据地完整性实验报告材料

***大学计算机科学与信息学院

软件工程系上机实验报告

《数据库原理》实验报告

题目

实验8数据的完整性

***

班级

***

日期

***

实验环境:

SQLServer2000

一、实验目的

熟悉通过SQL对数据进行完整性控制,通过实验加深对数据完整性的理解。

⏹相关知识

触发器是实施复杂完整性的一种机制。

触发器不需要专门的语句调用,当对它所保护数据进行修改时由DBMS自动激活,以防止对数据进行不正确,未授权或不一致的修改。

创建触发器的语法为:

CREATETRIGGER<触发器>ON<表名>

[WITHENCRYPTION]

FOR{[DELETE][,][INSERT][,][UPDATE]}

[WITHAPPEND]

[NOTFORREPLICATION]

AS

其中:

1)WITHENCRYPTION为加密选项。

2)DELETE选项为创建DELETE触发器。

DELETE触发器的作用是当对表执行DELETE操作时触发器被激活,并从指定表中删除元组,同时将删除的元组放入一个特殊的逻辑表(delete表)中。

触发器的动作可以检查delete表中的数据,以确定下一步该如何处理。

3)INSERT选项为创建INSERT触发器。

INSERT触发器在对指定表中执行插入数据操作时激活,激活后将插入表中的数据拷贝并送入一个特殊的逻辑表(inserted表)中,触发器会根据INSERT表中的值决定如何处理。

4)UPDATE选项为创建UPDATE触发器。

UPDATE触发器仅在对指定表中进行更新数据操作时激活。

UPDATE触发器激活后把将要被更新的原数据移入delete表中,再将要被更新后的新数据的备份送入inserted表中,UPDATE触发器对delete和inserted表进行检查,并决定如何处理。

5)NOTFORREPLICATION选项说明当一个复制过程在修改一个触发器表时,与该表相关联的触发器不能被执行。

一个触发器只适用于一个表,每个表最多只能有三个触发器,它们分别是INSERT、UPDATE和DELETE触发器。

触发器仅在实施数据完整性和处理业务规则时使用。

二、实验容

本实验的容为使用SQL对数据进行完整性控制(关系数据库的三类完整性、CHECK短语、CONSTRAINT子句、触发器)。

用实验证实,当操作违反了完整性约束条件时,系统如何处理的。

认真完成以下题目,按要求填写实验报告,记录所有实验用例。

(1)打开SQLServer2000的查询分析器,用DDL语句建立如下三个表。

表student1:

字段名

类型

长度

含义

约束

Sno

Char

10

学号

主码(约束名:

STU_PK)

Sname

Char

20

非空(约束名:

STU_U1)

Ssex

Char

2

性别

‘男’或’女’(约束名:

STU_C1)

Sage

Int

年龄

18到30(约束名:

STU_C2)

Sdept

Char

10

所在系

表course1:

字段名

类型

长度

含义

约束

Cno

Char

10

课程号

主码(约束名:

COU_PK)

Cname

Char

20

课程名

唯一(约束名:

COU_C1)

Cpno

Char

2

先行课

Ccredit

Int

学分

表SC1:

字段名

类型

长度

含义

约束

Sno

Char

10

学号

主码(约束名:

SC_PK)

外码(参照student1的Sno,约束名:

SC_FK1)

Cno

Char

20

课程号

主码(约束名:

SC_PK)

外码(参照course1的Cno,约束名:

SC_FK2)

Grade

Char

2

成绩

createtablestudent1(

Snochar(10),

Snamechar(20)

constraintSTU_U1NOTNULL,

Ssexchar

(2)

constraintSTU_C1CHECK(Ssexin('男','女')),

Sageint

constraintSTU_C2check(Sagebetween18and30),

Sdeptchar(10)

constraintSTU_PKPRIMARYKEY(Sno));

createtablecourse1(

Cnochar(10),

Cnamechar(20)

constraintCOU_C1UNIQUE,

Cpnochar

(2),

Ccreditint

constraintCOU_PKPRIMARYKEY(Cno));

createtableSC1(

Snochar(10),

Cnochar(10),

GradeCHAR

(2),

constraintSC_PKPRIMARYKEY(Sno,Cno),

constraintSC_FK1FOREIGNKEY(Sno)REFERENCESstudent1(Sno),

constraintSC_FK2FOREIGNKEY(Cno)REFERENCEScourse1(Cno),

);

(2)插入如下数据,什么原因导致某些数据不能正确插入?

Sno

Sname

Ssex

Sage

Sdept

95001

黎小明

16

CS

95002

小华

45

CS

95003

王小菲

26

MA

95004

王小凌

20

IS

95004

小烨

27

IS

insert

intostudent1(Sno,Sname,Ssex,Sage,Sdept)

VALUES('95001','黎小明','男',16,'CS');

insert

intostudent1(Sno,Sname,Ssex,Sage,Sdept)

VALUES('95002','小华','男',45,'CS');

insert

intostudent1(Sno,Sname,Ssex,Sage,Sdept)

VALUES('95003','王小菲','女',26,'MA');

 

insert

intostudent1(Sno,Sname,Ssex,Sage,Sdept)

VALUES('95003','王小凌','女',20,'IS');

insert

intostudent1(Sno,Sname,Ssex,Sage,Sdept)

VALUES('95003','小烨','男',27,'IS');

原因:

年龄不在约束条件,Sno不能重复插入。

学号重复。

 

Cno

Cname

Ccredit

1

高等数学

4

2

大学英语

4

3

计算机导论

3

4

计算机网络

3

5

计算机网络

3

 

insert

intocourse1(Cno,Cname,Ccredit)

VALUES('1','高等数学','4');

insert

intocourse1(Cno,Cname,Ccredit)

VALUES('2','大学英语','4');

insert

intocourse1(Cno,Cname,Ccredit)

VALUES('3','计算机导论','3');

insert

intocourse1(Cno,Cname,Ccredit)

VALUES('4','计算机网络','3');

 

insert

intocourse1(Cno,Cname,Ccredit)

VALUES('5','计算机网络','3');

原因:

Cname唯一,不能重复插入。

Sno

Cno

Grade

95001

1

80

95001

2

90

95003

1

95

95004

1

75

95004

2

95

insert

intoSC1(Sno,Cno,Grade)

VALUES('95001','1',80);

insert

intoSC1(Sno,Cno,Grade)

VALUES('95001','2',90);

insert

intoSC1(Sno,Cno,Grade)

VALUES('95003','1',95);

insert

intoSC1(Sno,Cno,Grade)

VALUES('95004','1',75);

insert

intoSC1(Sno,Cno,Grade)

VALUES('95004','2',95);

(3)给SC1表添加一个约束,约束名为SC1_C1,该约束限制Grade的取值围是0到100。

altertableSC1

addconstraintSC1_C1check(Gradebetween0and100);

(4)更改约束STU_C2,使得年龄的围是15到50。

altertablestudent1

dropconstraintSTU_C2;

ALTERTABLEstudent1

addconstraintSTU_C2CHECK(Sagebetween0and100);

(5)对SC1表设计一个触发器,该触发器保证每个学生所选课程的总学分不超过12分。

createtriggerInsert_SC1ondbo.SC1

forinsert,update

asif(12<=(selectsum(Ccredit)

fromSC1,Course1,Inserted

whereSC1.Cno=Course1.CnoandSC1.Sno=(selectSnofrominserted)))

begin

raiserror('不能选!

',0,0)

rollbacktransaction

endreturn;

(6)验证触发器。

insert

intoSC1

values('200215121','1',92)

insert

intoSC1

values('200215121','2',92)

insert

intoSC1

values('200215121','3',92)

三、实验步骤

1.在查询分析器中完成

(1)到(4)小题。

2.在企业管理器中创建触发器:

(1)在企业管理器中,由服务器开始逐步扩展到触发器所属表的数据库,打开表文件夹,在表窗口中用鼠标右击触发器所属的表(本例为选课表即SC1)。

(2)在弹出菜单上选择“所有任务”“管理触发器”项,则弹出如图7-1所示的触发器属性对话框。

图7-1触发器属性对话框

如果要新建触发器,在文本[T]的文本框中输入创建触发器的SQL语句(见实验容),单击“检查语法”按钮进行语法的检查,检查无误后,单击确定按钮。

如图7-2所示,于是执行对基本表SC1的插入和更新操作的时候,都会自动显示表SC1中的容。

请在查询分析器中进行验证该触发器。

图7-2触发器语法检查对话框

(3)如果要修改触发器,则在“名称”弹出项中选择要修改的触发器名(本例为SC_inserted),然后在文本[T]的文本框中对已有的容进行修改,检查无误后单击“确定”按钮。

如图7-3所示,将该触发器代码修改为检查插入、更新、删除操作时触发。

请在查询分析器中进行验证该触发器。

图7-3修改触发器语法检查对话框

(4)如果要删除触发器,则在“名称”弹出项中选择要删除的触发器名(本例为SC_inserted),并检查文本[T]的文本框中的容,看是否选得正确,最后单击“删除”按钮。

如图7-4所示。

图7-4删除触发器对话框

3.在查询分析器中插入某个学生的多个选课记录,设计和验证触发器是否能够保证该学生的所有课程的总学分不能超过12分。

 

三、出现的问题及其解决方案(列出遇到的问题和解决办法,列出没有解决的问题)

问题1:

在关系表时,提示提示出错。

分析原因:

输入的数据违反了用户定义的数据的完整性。

解决办法:

将数据改为定义围的数据。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1