实验四 表约束和索引管理文档格式.docx
《实验四 表约束和索引管理文档格式.docx》由会员分享,可在线阅读,更多相关《实验四 表约束和索引管理文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。
这样的一列或多列称为表的主键,它不能是空值。
注意:
一个表只能有一个主键约束,并且SQLServer为主键约束自动创建索引。
创建主键约束需要在表的设计窗口。
在SQLServer管理平台中选中要创建主键约束的表,按右键,在弹出菜单中选择【设计】,运行界面如下:
图4-1表设计窗口
在图4-1中正确选择要建立主键约束的列,如Sno,按右键,在弹出菜单中选择【设置主键】命令或在工具栏上点击“钥匙”按钮,主键约束就创建完毕!
点击设置主键后,如下所示:
图4-2在表中定义主键
此时,主键列的旁边会出现一个小钥匙的标志,而且允许空选项被自动取消,因为主键列必须输入数据,不允许为空。
在该设计窗口点击右键,在弹出菜单中选择【索引/键】命令,运行界面如下:
图4-3定义和管理主键
可以看到:
SQLServer为主键约束自动创建索引PK_Stu_InfoTable,PK即为PRIMARYKEY的缩写,后跟下划线和所在的表名。
在此窗口可以修改主键名称,选择定义主键的列和顺序。
单击【删除】,可以删除主键。
下面我们来验证一下主键列必须取唯一值,Stu_InfoTable中已有如下记录:
图4-4Stu_InfoTable中现有记录
我们添加一条“20106”的学生信息并输入下一行时,有出错信息如下图:
图4-5错误提醒窗口
按下【确定】按钮,记录添加不成功,Stu_InfoTable中仍然只有如图3的记录。
1.2唯一性(UNIQUE)约束
唯一性约束可以保证除主键外的一个或多个列的数据唯一性,以防止在列中输入重复的值。
在打开如图4-3的窗口后,单击【添加】添加一个以IX_开头的键。
在右侧的属性列表中,将“是唯一的”设置为“是”,可以创建唯一性约束。
如下图所示:
图4-6创建唯一性约束
单击上图中“列”属性后面的“…”,打开“选择索引列”窗口,如下图所示。
图4-7选择索引列
若选择“Number”,单击“确定”后,此唯一性确定的列同样不能存在重复的数据。
验证如下:
图4-8
1.3索引管理
索引是对表中的数据提供逻辑排序,可以提高数据的访问速度。
它包括:
唯一索引和聚集索引。
通常情况下,只有当经常查询索引列中的数据时,才需要在表上创建索引。
创建索引步骤:
右键单击要创建索引的表例如Stu_InfoTable,单击【设计】,再右键单击表设计器选择【索引/键】,运行界面如下图:
图4-9创建索引
单击“添加”按钮,在“列”属性下选择要创建索引的列。
可以选择多达16列。
为获得最佳性能,最好只选择一列或两列。
对所选列,可以指出索引是按升序还是降序。
如果要创建唯一索引,则在“是唯一的”属性中选择“是”。
设置完成后,单击“确定”按钮。
若不选择“是唯一的”,则姓名列可以含同名的学生。
此时,Name列是唯一的,验证如下:
图4-10
唯一索引可以确保索引列不包含重复的值。
而聚集索引通常可以加快UPDATE和DELETE操作的速度,因为这两个操作需要读取大量的数据。
若要修改或删除索引,则可以在打开图4-10窗口后,直接在右侧属性列表中修改索引信息,或选中要删除的索引点击“删除”即可。
2.域完整性:
检查(CHECK)约束
CHECK约束:
用来限制输入到列中的值,是一个逻辑表达式。
我们新建一个名为Stu_GradeTable的表,记录如下:
图4-11Stu_GradeTable记录表
例如,Stu_GradeTable中Grade列要求(大于或等于0)且(小于或等于100)的值,操作步骤如下:
(1)选择要建立CHECK约束的表,在图4-1表设计器中,点击右键,在弹出菜单中选择【CHECK约束】命令,运行界面如图4-12。
(2)在此窗口中点击【添加】按钮,如图4-12填写。
表设计器会缺省给出一个约束名,如CK-Stu_GradeTable,CK就是CHECK的缩写,后面加上建立约束的表名。
若要更改这个名称,需编辑“标识名称”文本框的内容。
图4-12设置CHECK约束
(3)点击【关闭】,CHECK约束设置完成。
下面我们来验证一下CHECK约束的作用。
在Stu_GradeTable中插入如下记录.保存新记录时,就会有出错提示,提示插入的数据违反了CHECK约束,出错信息如下图所示:
图4-13违反检查约束
按下【确定】按钮,记录添加不成功,要保存Stu_GradeTable,必须删除不合要求的记录。
3.参照完整性:
外键约束
外键约束的主要目的是控制存储在外键表中的数据,还可以控制对主键表中数据的修改。
例如,如果在Stu_InfoTable中删除(或更改)一个学生,而这个学生的Number在Stu_GradeTable中使用了,则这两个表之间关联的完整性将被破坏。
外键约束防止这种情况的发生。
又如果在Stu_GradeTable中插入(或更改)一条学生成绩记录,而这个学生的Number在Stu_InfoTable中不存在,外键约束也防止这种情况的发生。
下面说明建立外键约束的步骤:
(1)右键单击表Stu_GradeTable,在弹出菜单中选择【设计表】,打开后再右键单击【关系】命令,点击【添加】按钮后系统会自动生成一个关系,以FK_开头,运行界面如下:
图4-14外键关系对话框
(2)单击“表和列规范”后面的“…”,打开“表和列”对话框,从“主键表”的下拉列表中选择Stu_InfoTable作为关系主键方的表,在下面的网格中选择分配给该表作主键的列Number;
“外键表”默认为此时打开的表Stu_GradeTable,可以在它下面的网格中选择分配给该表作外键的列Number。
如下图所示
图4-15“表和列”对话框
设置完成后,外键关系对话框如图4-13会缺省给出一个关系名,如FK_Stu_GradeTable_Stu_InfoTable,FK就是FOREIGNKEY的缩写,后面加上建立关系的两张表。
(3)点击【关闭】按钮,外键约束设置完成。
下面我们来验证一下外键约束的作用。
如果我们想在Stu_GradeTable中插入一条并不存在的学生“20106”的成绩记录,编辑下一行时就会出现错误提示,提示插入的数据违反了外键约束.
四、上机练习
1.对实验三所做的图书数据库BookSys中的表“图书信息”中的“图书编号”列做主键约束,并验证效果。
图1在表中定义tusbh为主键
下面我们来验证一下主键列必须取唯一值,在BookSys-dbo.tsxx中已有如下记录:
图2BookSys-dbo.tsxx中现有纪录
我们添加一条“10010002”的图书编号并输入下一行时,如图:
图3错误提醒窗口
2.对表“读者信息”中的“身份证号”列做唯一性约束,并验证效果。
在“读者信息”表中,点击右键,打开索引/键窗口,将“是唯一的”设置为“是”,可以创建唯一性约束。
将“列”属性后面的“…”,打开“选择索引列”窗口,在列名中选择shenfenz,单击确定即可。
图4创建唯一性约束
唯一性验证如下:
在读者信息表中输入读者编号为00001003一列信息(使身份证列有重复数据),换下一行时出现如下图:
图5错误提醒窗口
3.对表“图书信息”中的“价格”列做检查约束:
价格只能大于等于0或小于等于200,完成后验证约束的效果。
(1)在“图书信息”表中点击右键,在弹出菜单中选择【CHECK约束】命令,出现一窗口,在此窗口中点击【添加】按钮,在表达式中输入jiag>
=0andjiag<
=200
图6创建检查约束
点击关闭按钮,CHECK约束设置完成。
下面来验CHECK约束的作用。
在原表中插入如下记录:
10010003,使其价格大于200,出现错误提示窗口:
图7错误提示
4.对表“图书信息”和“借阅信息”中的“图书编号”做外键约束,并验证约束后的效果。
(1)右键单击表”图书信息“,在弹出菜单中选择【设计】,打开后再右键单击【关系】命令,点击【添加】按钮后系统会自动生成一个关系,以FK_开头
(2)单击“表和列规范”后面的“…”,打开“表和列”对话框,从“主键表”的下拉列表中选择“借阅信息“作为关系主键方的表,在下面的网格中选择分配给该表作主键的列图书编号;
“外键表”默认为此时打开的表“图书信息“,可以在它下面的网格中选择分配给该表作外键的列图书编号。
(3)点击【确定】按钮,出现如下提示:
解决方法:
将“图书信息”表和“借阅信息”表中的图书编号设置成唯一性,点确定按钮之后,外键约束设置成功。
在图书信息中插入一条并不存在的图书编号为“10010003”的记录,编辑下一行时就会出现错误提示,提示插入的数据违反了外键约束,出错信息如下图所示:
5.对表“读者信息”和“借阅信息”中的“读者编号”做外键约束,并验证约束后的效果。
同样的,先将“读者信息”和“借阅信息”两表中的读者编号设置成唯一性。
然后做外键约束如下:
验证外键约束作用如下:
在读者信息中插入一条并不存在的读者编号为“0001003”的记录,编辑下一行时就会出现错误提示,提示插入的数据违反了外键约束,出错信息如下图所示: