2.2 表结构设计
建立数据库对象后,下一步工作是创建数据表。数据表是Access数据库中唯一存储数据的对象,数据按所定义的结构有规则地排列,一行数据称为一条记录,一列数据称为一个字段。数据表的建立与实际表格的建立一样,可分为两个步骤:建立表结构、输入表数据,相关的操作也分为两类:表结构的操作和表数据的操作。本节以“导师”表和“研究生”表为例进行表结构设计、建立及相关操作。
表2-1是即将在“研究生管理”数据库中创建的“导师”表,该表共有6条记录,每条记录有9个字段。
表2-1 “导师”表
在数据表中,每个字段的数据都有类型、宽度、小数位数规定,还可以指定该字段的默认值、取值范围、输入格式等属性。
2.2.1 字段属性
Access数据表的字段属性包括3类:类型属性、常规属性和查阅属性。
1.类型属性
Access数据表的字段类型很多,选用的原则是既满足计算需要,又要确保数据不溢出,同时不浪费存储空间。数据表的字段数据类型如表2-2所示。
表2-2 字段的类型属性
下面,以表2-1所示的“导师”表为例,说明字段类型的选取:
(1)“姓名”“性别”“职称”“系编号”字段的值为字母、汉字和数字的组合,可取文本类型;“导师编号”字段的值虽全由数字构成,但导师编号不参与算术运算,其数据类型也应设置为文本类型。
(2)“年龄”字段需参与统计,例如求教授的平均年龄等,故其字段值应该是数字。考虑到年龄是255以内的正整数,采用字节型最节省空间。
(3)对“博导”字段,因为只有“是”与“否”两种取值,所以其类型应设定为“是/否”型。
(4)对“工资”字段,考虑到需要对工资数据作各种统计汇总工作,而金额不应有误差出现,故其类型应设定为“货币”型。
(5)“照片”字段涉及图片,其类型为OLE对象。以后在窗体上用对象框来显示该记录中的照片。
【例2-2】使用设计视图创建“导师”表。
(1)在“研究生管理”数据库窗口中选择“创建”选项卡,单击“表设计”按钮,打开表的设计视图窗口。
(2)在表的设计视图窗口的“字段名称”栏输入字段名,在“数据类型”栏为本字段选择一个适当的类型,如图2-10所示。
图2-10 输入字段的名字、类型
(3)单击快速访问工具栏中的“保存”按钮,或者执行“文件”菜单中的“保存”命令,在弹出的对话框中为表输入名称“导师”,单击“确定”按钮。
(4)Access将弹出对话框,询问是否要为本表设置一个主键,如图2-11所示。这里暂时不设定主键,单击“否”按钮,“导师”表结构创建完毕。观察导航窗格,在“表”对象下出现了“导师”表。
图2-11 定义主键提示对话框
至此,例2-2的表创建任务完成,下一步工作是设置字段的常规属性和查阅属性,以完善字段属性。
2.常规属性
常规属性用于对已指定数据类型的字段作进一步的说明,常用的常规属性如下。
(1)字段大小
字段大小指该字段占用多大的存储空间。用户可以自行调整,原则是不溢出(长度太小)、不浪费,例如姓名可以为3,性别可以为1等。Access 2010使用Unicode编码,无论汉字、字母还是数字均用2字节表示,称为1个字符。
日期型、是/否型、OLE对象型等字段无须指定大小,它们占用固定长度的空间。
如果字段的类型属性已指定为数字型,“字段大小”属性可进一步说明字段的取值范围及是否有小数,其占用的存储空间字节数是固定不变的,如表2-3所示。
表2-3 数字型字段的“字段大小”属性
【例2-3】设置“导师”表的常规属性。
在导航窗格中右击“导师”表,在弹出的快捷菜单中选择“设计视图”命令,对已建立的“导师”表的各个字段设置如下“字段大小”常规属性:
①“导师编号”字段的“字段大小”指定为3字符。
②“姓名”字段的“字段大小”指定为4字符。
③“性别”字段的“字段大小”指定为1字符。
④“年龄”字段的“字段大小”由“长整型”改为“字节”型。
⑤“博导”字段的类型已设定为“是/否”型,不能改变大小。
⑥“职称”字段的“字段大小”指定为5字符。
⑦“工资”字段的类型已设定为“货币”型,不能改变大小。
⑧“系编号”字段的“字段大小”指定为3字符。
⑨“照片”字段的类型已设定为“OLE对象”型,不能指定大小。
(2)格式
如果字段的类型为数字、日期/时间、是/否、货币等,还可以进一步设置它们的具体格式:对数字和货币字段类型,可设置的格式包括常规数字、货币、欧元、固定、标准、百分比、科学记数,其中“固定”指小数的位数不变,其长度由“小数位数”属性说明;对日期/时间字段,可设置日期或时间的显示格式,如图2-12所示;对“是/否”型字段,可设置布尔值的取值形式,如图2-13所示。
图2-12 日期/时间类型可取的格式
图2-13 是/否型字段的取值
【例2-4】设置“导师”表中“博导”字段的格式。
“博导”字段用于表示该导师是否为博士生导师,其类型已设置为“是/否”型,这里将其格式改为“是/否”。“是/否”型只占用一个二进制数据位(1bit)。
(3)输入掩码
数字型、文本型、货币型等字段可以设置掩码。掩码可以强制实现某种输入格式,以保证输入正确的数据。
【例2-5】为“导师”表新增一个“代码”字段,并为其设置一个输入掩码,形式为342-[78954]-962,注意其中的“-”“[”“]”是固定的。
①在“导师”表中添加一个字段“代码”,并将其指定为“文本”型,长度15。
②单击“常规”属性选项卡上“输入掩码”栏右侧的,先提示“必须先保存表。是否立即保存?”信息,单击“是”按钮保存表;然后打开“输入掩码向导”对话框,如图2-14所示。
③由于无现成输入掩码可套用,单击“编辑列表”按钮准备新建掩码,此时弹出“自定义‘输入掩码向导’”对话框,如图2-15所示。
图2-14 “输入掩码向导”对话框
图2-15 “自定义‘输入掩码向导’”对话框
④单击对话框下端的记录浏览按钮上的按钮新建一个输入掩码,并设置新输入掩码的格式,如图2-16所示。设置完毕,单击“关闭”按钮返回图2-14所示的对话框,“代码”字段的输入掩码创建完毕。
⑤在图2-14所示的对话框中选定刚创建的输入掩码,单击“完成”按钮,完成设置“代码”字段的输入掩码,如图2-17所示。
图2-16 设置新输入掩码格式
图2-17 “代码”字段的输入掩码
⑥双击“导师”表,在“代码”字段出现输入格式,按要求在下画线上输入数字即可,如图2-18所示。
图2-18 向有输入掩码的“代码”字段输入数据
使用输入掩码必须了解掩码符号的含义,常用掩码符号的含义如表2-4所示。
表2-4 常用掩码符号及其含义
设置输入掩码的方法有:“输入掩码向导”设置(前面已介绍)和用户手工设置,用户手工设置就是在图2-17所示对话框的“输入掩码”框中直接输入,输入掩码由3部分组成,各部分之间通过分号分隔,例如:000-\[00000\]-000;;。第一部分是输入掩码的格式;第二部分表示是否保存原义字符,0表示保存,空白表示不保存;第三部分表示占位符所用的字符,省略用下画线表示。
常用的输入掩码有:电话号码(000-00000000;;)、邮政编码(000000;;_)、身份证号码(000000000000000999;;_)、中文长日期(9999\年99\月99\日;0;_)、短日期(0000-99-99;0;_)等。
(4)标题
该属性用于指定字段的标题。在以后涉及的窗体设计中,当在窗体上添加一个控件(如文本框)时,系统会自动为该控件添加一个标签予以说明,如果文本框与字段绑定,将出现该字段的标题;如果没有标题则用字段名代替。
(5)默认值
该属性用于设置字段自动填充的值。例如,如果大多数的导师为男性,为输入方便起见,可将“导师”表“性别”字段的默认值设定为“男”。这样每当新添一条新记录时,其“性别”将自动为“男”,如果是女导师,再修改为“女”。
(6)有效性规则与有效性文本
有效性规则用于限定该字段的有效取值范围,在关系型数据库理论中被称为域完整性规则或用户自定义完整性规则;有效性文本是一段文字,当有违反有效性规则的数据输入时,系统将用对话框提示出错,对话框上的提示文字就是有效性文本内容。
【例2-6】规定导师的年龄不得低于40岁,超过65岁必须退休,超出该范围的年龄数据Access将拒绝接受。
选定“年龄”字段,在“常规”选项卡的“有效性规则”栏的文本框中输入“>=40And<=65”,在“有效性文本”框中填写当数据出错时给予的提示或说明,如“年龄值应处于40~65岁之间!”,如图2-19(a)所示。
输入完成后,在数据表视图的任一年龄字段中输入80,Access即弹出图2-19(b)所示的对话框提示出错。
图2-19 设置有效性规则与有效性文本
(7)必填字段
该属性值默认为“否”。如果设定为“是”,则该字段不允许出现空值。例如,在“导师”表中,可以将姓名、性别等字段的“必填字段”改成“是”。
(8)允许空字符串
如果该字段类型为文本,则默认值“是”表示可以是空值,否则设置为“否”。例如,在“导师”表中,可以将姓名字段、性别字段的“允许空字符串”改成“否”。
(9)索引
询问是否要以该字段为关键字创建索引,详见2.2.4节的相关介绍。
(10)Unicode压缩
可以对文本型数据作适当压缩,默认值为“是”。
(11)输入法模式
决定是否需要使用汉字输入法,仅对文本数据类型的字段有效。该属性默认值为“开启”,意为打开汉字输入法(使用默认的输入法);“随意”表示不改变当前的输入方式,“关闭”则关闭当前打开的汉字输入法,只进行英文输入。例如,在“导师”表中,可将“姓名”“性别”“职称”字段的输入法打开,将“导师编号”和“系编号”的输入法关闭。
3.查阅属性
查阅属性用于改变数据输入的方式,对于一些取值固定的字段,可以在“查阅”选项卡中将该字段的显示由文本框改为列表框或组合框。这样数据从通过键盘逐字输入改成选择列表框(组合框)值,既减轻了数据录入强度,也杜绝了非法数据的进入。“导师”表中适合改变查阅属性的字段有:性别、职称和系编号,操作方法详见2.3.1节的相关介绍。
2.2.2 表的其他创建方式
Access提供了3种创建数据表的方法,2.2.1节介绍的使用设计视图创建表结构是最常用的方法,可以创建最符合需求、最节省空间的表结构。除设计视图之外,还可以使用表模板创建表和通过输入数据创建表。
1.使用表模板创建表
对于一些常用的应用,例如创建联系人、任务、资产等相关主题的数据表和窗体等对象,可以使用Access自带的表模板。使用表模板创建表的好处是方便快捷。
【例2-7】使用模板创建“联系人”表。
操作方法:切换到“创建”选项卡,单击“应用程序部件”按钮,在弹出的下拉列表中选择“联系人”选项;此时将弹出“创建关系”对话框,选择“不存在关系”单选按钮,单击“创建”按钮,开始从模板创建表、查询、窗体和报表对象,如图2-20所示。至此“联系人”表创建成功。
图2-20 使用表模板创建“联系人”表
2.通过输入数据创建表
这也是一种“傻瓜”型的建表方法,如同在Excel中建立工作表一样直接向一个空白数据表中输入数据。
【例2-8】用输入数据的方法创建“导师2”表。
操作方法:切换到“创建”选项卡,单击“表”按钮,新建一个空白表,并进入该表的数据表视图,在空表中依次输入导师的各项数据,如图2-21所示。在这种方法中,如果某列是文字则自动定义成宽度为255个字符的文本型,如果是整数则定义为长整型,是实数就自动套用双精度类型,用牺牲存储空间的方法以不变应万变,将数据直接形成表。
图中表的各个字段名依次为字段1、字段2、字段3……,多了一个“ID”字段,少了一个“照片”字段,字段属性有较多的不合适,如需修改则需切换到设计视图:单击“开始”选项卡中的“视图”按钮。
图2-21 通过输入数据创建导师表
说明:数据表对象有多种视图:数据表视图、设计视图等,可通过“开始”选项卡中的“视图”按钮[见图2-22(a)]或状态栏右部的视图按钮[见图2-22(b)]进行切换。设计视图用于设计和编辑表结构,数据表视图用于输入、编辑和格式化表数据。
图2-22 切换不同视图
2.2.3 主键与表间关系
“研究生管理”数据库将包含4个表:系、导师、研究生和研究方向。“系”表与“导师”表是1:M关系,即一个导师只能属于一个系,而一个系可以有若干个导师;同样“导师”表与“研究生”表也是1:M关系:一个导师带多名研究生,一个研究生属于一个导师;研究方向用于在“研究生”表中以下拉列表框的形式输入数据。除了“研究方向”表以外,其余3个表应建立相应的主键。
“导师”表已经建立,“系”表和“研究生”表的结构分别如表2-5和表2-6所示,而“研究方向”表只有“研究方向”一个文本型字段,字段大小为10。
根据给出的表结构,仿照“导师”表的建立方法,分别创建“系”表、“研究生”表和“研究方向”表。后面的教学工作将围绕“研究生管理”数据库的4个表展开。
表2-5 “系”表结构
表2-6 “研究生”表结构
1.定义主键
主键在数据表中用于唯一标识记录,主键字段的值不能为空,也不能重复。
【例2-9】将“导师”表中的“导师编号”字段定义成主键。
(1)在导航窗格右击“导师”表,在弹出的快捷菜单中选择“设计视图”命令。
(2)在设计视图中,选定“导师编号”字段,单击“设计”选项卡中的“主键”按钮,这时在“导师编号”字段的左侧出现钥匙图案,表示主键设定成功,如图2-23所示。
图2-23 设置“导师”表的主键
(3)单击“保存”按钮保存表结构。
采用同样的操作,分别将“系”表的“系编号”字段、“研究生”表的“学号”字段设为主键。
说明:主键既可以在数据输入之前设置,也可以在数据输入后设置。如果是输入数据后设置主键,则必须注意已输入的“导师编号”值不能为空值,也不能重复,否则保存时将弹出图2-24所示的提示出错信息,主键设置失败。建议在建立表结构后立即设置主键,这样可以阻止非法数据进入表中。
图2-24 重复的“导师编号”值导致的错误
2.建立表间关系
数据表之间的关系由公共属性实现,即“一”表的主键在“多”表中作为外键。在研究生管理数据库中,“导师”表的外键是“系编号”字段,参照表是“系”表,“研究生”表的外键是“导师编号”字段,参照表是“导师”表。外键无须专门设置。
【例2-10】建立“导师”表和“研究生”表之间的一对多关系。
(1)定义主键。前面已经定义。
(2)切换到“数据库工具”选项卡,单击“关系”按钮,打开“关系”窗口,该窗口显示当前数据库中已经存在的表间关系。
(3)右击“关系”窗口的空白处,在弹出的快捷菜单中选择“显示表”命令,弹出图2-25所示的对话框,先选中“导师”表和“研究生”表,单击“添加”按钮,将这两个表添加到关系窗口中,然后单击“关闭”按钮关闭“显示表”对话框。
(4)在关系窗口中,将“导师”表的“导师编号”拖动到“研究生”表的“导师编号”字段上(反之亦可),在弹出的“编辑关系”对话框中将3个复选框依次选中,使两个数据表间实现一对多关系,如图2-26所示。
图2-25 将数据表添加到关系窗口
图2-26 “编辑关系”对话框
(5)单击“创建”按钮,保存并关闭关系窗口,关系定义完成。
同理可建立“系”表与“导师”表之间的一对多关系。完成后的3表关系如图2-27所示。如果关系设置正确,表间连线是粗线,两头标上了关系的类型(1、∞)。
图2-27 系、导师、研究生的表间关系
说明:
(1)如果待建关系的两个表未设置主键,则两个表的关系只能是“未定”。
(2)若在“编辑关系”对话框中选中“实施参照完整性”复选框,则“研究生”表中“导师编号”取值必须是“导师”表的“导师编号”已有的值,否则系统将提示出错;选中“级联更新相关字段”复选框后,一旦“导师”表的“导师编号”字段值发生改变,“研究生”表的“导师编号”字段中的相同值也产生同样的改变;选中“级联删除相关记录”复选框,当删除某位导师记录时,具有相同导师编号的所有研究生记录自动被删除。如果不选中“级联更新相关记录”和“级联删除相关记录”复选框,则既不能删除“导师”表中的记录,也不允许修改“导师”表的“导师编号”字段,以维护“研究生”表的参照完整性。
(3)外键的名称与参照表主键名称可以不相同,但它们的数据类型应该一致,至少要兼容。
(4)如果“导师”表和“研究生”表在建立关系前已有记录,则一旦“研究生”表的“导师编号”字段出现“导师”表中没有的值,Access将拒绝建立两者的表间关系。
3.删除表间关系
如果要删除表间建立的关系,先在图2-27所示的“关系”窗口中单击要删除的关系连线(此时该连线会变粗),然后按【Delete】键,在随后出现的“确实要从数据库中永久删除选定的关系吗?”对话框中单击“是”按钮。
2.2.4 建立索引
如果针对某个字段创建索引,则在数据表中查询该字段值的速度将极大地加快,同时可以实现数据的有序输出和分组操作。索引需要占用一定的存储空间。Access的索引操作有3个选项,如表2-7所示。
表2-7 字段索引选项
1.建立索引
【例2-11】为“导师”表的“姓名”字段建立索引,以便按姓名快速查找记录。
(1)在导航窗格中右击“导师”表,在弹出的快捷菜单中选择“设计视图”命令,进入表结构设计视图。
(2)单击“姓名”字段,在“常规”属性选项卡上找到“索引”属性,考虑到可能有人同名同姓,选择“有(有重复)”为该字段建立一个数据可以重复的索引,如图2-28所示。
图2-28 为“姓名”字段设置索引
(3)索引设置完成后单击工具栏中的“保存”按钮保存表结构,然后关闭设计视图。
说明:
(1)每个字段的索引属性默认值为“无”。
(2)如果有多个索引,可将其中的一个设置为主索引,记录将按主索引的升序(或降序)显示。
(3)如果将一个字段指定为主键,系统将自动为其建立一个无重复值的索引,且该索引一定是主索引。
(4)可建立包含若干个字段的组合索引,例如“性别+年龄”索引。
2.建立组合索引
【例2-12】为“导师”表创建“性别+年龄”组合索引。
(1)在导航窗格中右击“导师”表,在弹出的快捷菜单中选择“设计视图”命令,进入表结构设计视图。
图2-29 生成组合索引
(2)单击“设计”选项卡中的“索引”按钮,弹出“索引”对话框,在“索引名称”栏中输入索引名称,如“性别&年龄”;然后通过“字段名称”栏的下拉按钮分别选择性别和年龄,以及排序次序,如图2-29所示;设置完毕,关闭“索引”对话框。
(3)为观察组合索引的效果,可执行如下操作:
①暂时撤销“导师编号”字段的主键设置。先单击“数据库工具”选项卡中的“关系”按钮,在关系窗口中撤销“导师”表和“研究生”表之间的关系;然后进入“导师”表的设计视图,取消“导师编号”字段的主键设置。
②单击“保存”按钮,保存编辑后的表结构。
③单击“开始”选项卡中的“视图”按钮,切换到“导师”表的数据表视图,可观察到表中记录按性别字段的值升序显示(“男”字的拼音字母小于“女”,文本的大小由字符的Unicode值决定),而相同性别的记录则按年龄值降序排列,如图2-30所示。此时“导师编号”字段值呈无序状。
④先恢复“导师编号”字段的主键设置,然后恢复“导师”表和“研究生”表之间的关系。
图2-30 按组合索引字段值显示的记录