




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验八 数据完整性 实验指导一、完整性的概念数据完整性是指存储在数据库中的数据正确无误,并且相关数据具有一致性。数据库中的数据是否完整,关系到数据库系统能否真实的反映现实世界。立足在“学生”表中学生的学号要具有唯一性,学生性别只能是男或女,其所在的系部、专业、班级必须是存在的,否则,就会出现数据库中的数据与现实不符的现象。如果数据库中总存在不完整的数据,那么它就没有存在的必要了,因此,实现数据的完整性在数据库管理系统中十分重要。根据数据完整性机制所作用的数据库对象和范围不同,数据完整性可分为实体完整性、域完整性、参照完整性和用户定义完整性4种类型。1. 实体完整性 实体是表中的记录,表中的一条记录就是一个实体。实体完整性要求在表中不能存在完全相同的记录,而且每条记录都要具有一个非空且不重复的主键值。这样,就可以保证数据所代表的任何事物都不重复、可以区分。例如,学生表中的学号必须唯一,并且不能为空,这样就可以保证学生记录的唯一性。实现实体完整性的方法主要有主键约束、唯一索引、唯一约束和制定IDENTITIY属性。2. 域完整性 域完整性是指特定列的项的有效性。域完整性要求向表中指定列输入的数据必须具有正确数据类型、格式及有效的数据范围。例如,假设现实中学生的成绩为百分制,则在“课程注册”表中,向成绩列输入的数据,不能出现字符,也不能是小于0或大于100的数值。实现域完整性的方法主要有CHECK约束、外键约束、默认约束、非空约束、规则及在建表时设置的数据类型。3. 参照完整性 参照完整性是指在有关联的两个或两个以上的表中,通过使用主键和外键或唯一键和外键之间的关系,使表中的键值在相关表中保持一致。引用完整性要求不能引用不存在的值。如果一个键值发生更改,则在整个数据库中,对该键值和所有引用要进行一致性的更改。例如,在学生表中的“班级代码”列的值必须是在班级表中“班级代码”列中存在的值,防止在录入学生记录时将学生分配到一个不存在的班级中。在SQL Server 2005中,参照完整性是通过FOREIGN KEY 和CHECK约束,以外键与主键之间或外键与唯一键之间的关系为基础。4. 用户定义完整性 用户定义的完整性是应用领域需要遵守的约束条件,其允许用户定义不属于其他任何完整性分类的特定业务规则。所有的完整性类型(包括CREATE TABLE中所有列级约束和表级约束、存储过程以及触发器)都支持用户定义完整性。二、使用约束约束是SQL Server提供的自动强制数据完整性的一种方法,它通过定义列的取值规则来维护数据完整性。1. 约束的类型 SQL Server2005支持的约束有NOT NULL(非空)约束、CHECK(检查)约束、UNIQUE(唯一)约束、PRIMARY KEY(主键)约束、FOREIGN KEY(外键)约束和DEFAULT(默认)约束。l PRIMARY KEY约束。主键约束用来强制实现数据的实体完整性,它是在表中定义一个主键来唯一标识表中每行记录。例如,在“学生”表中可以将学生编号设置为主键,用来保证表中的学生记录具有唯一性。一般情况下,数据库中的每个表都包含一列或一组列来唯一标识表中的每一行记录的值。l UINQUE约束。唯一约束用来强制实现数据的实体完整性,它主要用来限制表的非主键列中不允许输入重复值。例如在“专业”表中可以将专业代码作为主键用来保证记录的唯一性。如果不允许一个学院有同名专业存在,应该为专业名称列定义唯一约束,以保证非主键列中不出现重复值。l NOT NULL约束。非空约束用来强制实现数据的域完整性,它用于设定某列值不能为空。如果指定某列不能为空,则在添加记录时,必须为此列添加数据。例如,对于“班级表,存在一个班,就必须存在其相应专业,这时,就应该设置专业代码不能空。注意:定义了主键约束和标识列属性的列不允许为空。l CHECK约束。检查约束用来强制数据的域完整性,它使用逻辑表达式来限定表中的列可以接受的数据范围。例如,对于学生成绩的取值应限定在0100之间,这时,就应该为成绩列创建检查约束,使其取值在正常范围内。l DEFAULT约束。默认约束用来强制数据的域完整性,它为表中某列建立一个默认值。插入记录时,如果没有为该列提供输入值,系统就会自动将默认值赋给该列。例如,对于“学生“表中的性别字段,可以提供其默认值为男,当输入记录时,对于男生就可以不输入性别数据,而由默认值提供。l FOREIGN KEY约束。外键是指一个表中的一列或列组合,它虽不是该表的主键,却是另一个表的主键。通过外键约束可以为相关联的表建立联系,实现数据的参照完整性,维护两表之间数据的一致性关系。例如,如果要求“学生”表中“班级代码”列的取值,必须是“班级”表中“班级代码”列的列值之一,就应该在“学生”表的“班级代码”上创建外键约束,从而使“学生”表和“班级”表中的“班级代码”具有一致性。约束还可以分为列约束和表约束两类。当约束被定义于某个表的一列时成为列约束,定义于某个表的多列时成为表约束。当一个约束中必须包含一个以上的列时,必须使用表约束。2. 创建主键约束 (1)使用SSMS创建主键约束【例】在“studentdb”数据库中,将“选课SC”表中的“学号sno、课程号Cno”列设置为组合主键。其操作步骤如下:1)启动SSMS,在“对象资源管理器”中,依次展开“数据库”、“studentdb”、“表”,右击“sc”表,在弹出的快捷菜单中选择“修改”命令,打开“表设计器”。2)在表设计器中,选择需要设置为主键的字段,如果需要选择多个字段,可以按住【ctrl】,同时使用鼠标单击每个要选择的字段。本例中,依次选学号sno、课号Cno字段。3)选好字段后,右击选择的某个字段,在弹出的快捷菜单中选择“设置主键”。如图8.1所示。图8.1 选择“设置主键”命令4)执行命令后,在作为主键的字段前有一个钥匙图标,“表设计器”窗口如图8.2所示。也可以在选择好字段后,单击工具栏中的“钥匙”工具按钮,设置主键。图8.2 “表设计器”窗口5)关闭表设计器,并保存设置。(2)使用T-SQL语言创建主键约束可以用CREATE TABLE,也可以用ALTER TABLE为已存在的表创建主键约束。格式如下:ALTER TABLE table_nameADD CONSTRAINT constraint_namePRIMARY KEYCLUSTERED|NONCLUSTERED(COLUMN,n)其中:l Constraint_name是主键约束名称;l CLUSTERED表示在该列上建立聚集索引;l NON CLUSTERED表示在该列上建立非聚集索引。下面分别使用建表命令和修改表命令创建主键约束。【例】在studentdb数据库中建立一个“民族”表Nationality(民族代码NNo,民族名称NName),将“民族代码”指定为主键。USE studentdbGOCREATE TABLE Nationality(NNo char(2) CONSTRAINT pk_nno PRIMARY KEY,NName varchar(30) NOT NULL)【例】在studentdb数据库中的“课程Course”表中,指定字段“课程号Cno”为表的主键,代码如下:ALTER TABLE courseADD CONSTRAINT pk_cnoPRIMARY KEY CLUSTERED(cno)3. 创建唯一约束(1)使用SSMS创建唯一约束【例】在studendb数据库中,为课程“course”表中的“cname”字段创建一个唯一约束。操作步骤如下:1)启动SSMS,在“对象资源管理器”中,依次展开“数据库”、“studentdb”、“表”节点。2)右击“course”表,在快捷菜单中单击“修改”命令,打开“表设计器”,右击任意字段,在快捷菜单中单击“索引/键”,打开“索引/键”对话框。3)单击“添加”命令按钮,系统给出系统默认的唯一约束名:“IX_Course”,显示在“选定的注/唯一或索引”列表框中,如图8.3所示。图8.3 “索引/键”对话框4)选中唯一约束“IX_Course”,在其右侧的“属性”窗口中,可以执行修改约束名称、设置约束列等操作。5)单击“属性”中的“常规”“列”属性,右侧出现“”按钮,单击该按钮,打开“索引列”对话框,在如图8.4所示,在列名下拉列表框中选择“cname”,在排序顺序中选择“升序”,设置创建唯一约束的列名。图8.3 “索引/键”对话框6)设置完成后,单击“确定”,回到“索引/键”对话框,修改常规属性中“是唯一的”属性值为“是”,如图8.5所示。图8.5 “索引/键”对话框17)设置完成后,关闭“索引/键”对话框和“表设计器”窗口,保存设置。(2)使用T-SQL语言创建唯一约束语法格式:ALTER TABLE table_nameADD CONSTRAINT constraint_nameUNIQUECLUSTERED|NONCLUSTERED(COLUMN,n)其中:l table_name是需要创建唯一约束的表名称;l constraint_name是唯一约束名称;l column是表中需要创建唯一约束的列名称;【例】在studentdb数据库中,为“民族”表Nationality中的“民族名称”字段创建唯一约束,代码如下:ALTER TABLE NationalityADD CONSTRAINT uk_NName UNIQUE NONCLUSTERED(NNAME) 4. 创建检查约束(1)使用SSMS创建检查约束【例】为student表的“出生日期sbirth”列创建一个名称为ck_csrq的检查约束,以保证输入的数据大于1990年1月1日而小于当天日期。1)启动SSMS,在“对象资源管理器”中,依次展开“数据库”、“studentdb”、“表”。2)右击“student”表,在快捷菜单单击“修改”,打开“表设计器”,右击任意字段,单击“CHECK约束”,打开对话框。3)单击“添加”命令按钮,系统给出默认的CHECK约束名:“CK_student”,显示在“选定的CHECK约束”列表中,创建“CHECK约束”对话框如图8.6所示。图8.6 创建“CHECK约束”对话框4)单击“属性”窗口中“常规”属性“表达式”,在其对应的文本框中输入约束条件(输入sbirth1990/01/01 AND sbirth=0 AND Grade=100)5. 创建默认约束用户在输入数据时,如果没有给某列赋值,该列的默认约束将自动为该列指定默认值。默认值可以是常量、内置函数或表达式。使用默认约束可以提高输入记录的速度。(1)使用SSMS创建默认约束【例】在student数据库中,有一“教师”Teacher表,为该表中的“学历”Teducation字段创建默认值,其默认值为“bachelor”。操作步骤:1)启动SSMS,在“对象资源管理器”中,依次展开“数据库”、“student”、“表”2)右击“教师表”teacher,在快捷菜单中选择“修改”,打开“表设计器”。3)单击需要设置默认的列,在下面列属性设置栏的“默认值或绑定”选项对应的输入框中输入默认值即可,如图8.9所示。图8.9 “表设计器”创建默认值窗口4)设置完成后,关闭“表设计器”。(2)使用T-SQL语言创建默认约束语法格式:ALTER TABLE table_nameADD CONSTRAINT constraint_nameDEFAULT constant_expressionFOR column_name其中:l Constant_expression是默认值l Column_name是建立默认的列名称【例】在student数据库中,为“教师”Teacher表的“学历”Teducation字段创建默认值,其默认值为“doctor”。ALTER TABLE teacherADD CONSTRAINT df_xueliDEFAULT doctor FOR Teducation6. 创建外键约束外键约束用来维护两个表之间的一致性关系。外键的建立是将一个表(主键表)的主键列包含在另一个表(从键表)中,这些列就是从键表中的外键。在从键表中插入或更新的外键值,必须存在于主键表中,这就保证了两个表中相关数据的一致性。注意,要先在主键表中设置好主键(或唯一键),才能从主键表中建立与之具有数据一致性关系的外键。(1)使用SSMS创建外键约束【例】在studentdb数据库中,为“student”表的所属班级代码“Sclass”列创建外键约束,从而保证在“student”表中输入有效的班级代码。1)启动SSMS,在“对象资源管理器”中,依次展开“数据库”、“student”、“表”。2)右击“student”表,选择“修改”,打开表设计器,右击任意字段,选择“关系”,打开“外键关系”对话框。3)单击“添加”,系统给出默认的外键约束名:“FK_student_student”,显示在“选定的关系”列表框中,如图8.10所示。图8.10 “外键关系”对话框4)单击“FK_student_student”外键约束名,在其右侧的“属性”窗口单击“表和列规范”属性,再单击该属性右侧的“”按钮,打开“表和列”对话框,如图8.11所示。图8.11 “表和列”对话框5)在“表和列”对话框中,修改外键的名称,选择主键表和表中的主键,以及外键表和表中的外键,修改后结果如图8.11所示。单击“确定”,回到“外键关系”对话框。6)单击关闭按钮,完成外键约束的创建。(2)使用T-SQL语言创建外键约束语法格式:ALTER TABLE table_nameADD CONSTRAINT constraint_nameFOREIGN KEY(column_name,)REFERENCES ref_table(ref_column_name,)其中:l table_name是需要创建外键的表名称;l constraint_name是外键约束名称;l Ref_table是主键表名称;l Ref_column_name是主键表的主键列名称。【例】在studentdb数据库中,为“student”表的所属班级代码“Sclass”列创建外键约束,从而保证在“student”表中输入有效的班级代码。ALTER TABLE studentADD CONSTRAINT fk_student_class FOREIGN KEY (sclassno)REFERENCES class(classno)7. 查看约束的定义(1)使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 能源项目授权委托协议书范本深度剖析
- 劳动合同变更与员工离职补偿协议范本
- 高铁站停车场车位购买及增值服务合同
- 2025个人装修合同样本
- 2025店铺买卖合同样本
- 2025农田除草承包合同范本
- 2025【合同范本】家居用品专卖店加盟合同
- 2025二手房屋买卖合同协议
- 小学二年级语文教学的工作总结
- 电位考试题及答案
- 2024智能交通系统架构设计试题及答案
- 生地考试测试题及答案
- 热泵技术考试题及答案
- 旅游英语考试试题及答案
- 【课件】人体的骨骼课件北师大版生物七年级下册
- 英语财务报告阅读试题及答案
- 2025年出版:全球市场光伏硅胶总体规模、主要生产商、主要地区、产品和应用细分调研报告
- 2025甘肃省农垦集团有限责任公司招聘生产技术人员145人笔试参考题库附带答案详解
- 早教实习合同协议
- 2025广东食品药品职业学院教师招聘考试试题及答案
- 天津中煤进出口有限公司笔试
评论
0/150
提交评论