2.4 为数据选择适当的字段类型
Access 2007开发指南(修订版)
为各个字段选择的数据类型对应用程序的性能及其功能有很大影响。以下几个因素会影响到对表中各个字段数据类型的选择:
字段中所存储的数据类型;
字段的内容是否需要包含在算式中;
是否需要按字段的数据进行排序;
按字段的数据进行排序的方式;
存储空间对用户来说是否特别重要。
需要在字段中存储的数据类型对数据类型的选择影响最大。例如,如果要存储以0起始的数字,那么就不应该选择“数字”字段,因为输入到“数字”字段中的起始0会被忽略。这样的数据例子包括邮政编码(有些是以0起始的)和部门代号。
注意
如果存储在字段中的起始0不是很重要,也就是说,只须让其显示在窗体和报表之中,那么可以使用字段的“格式”属性。2.5节将对“格式”属性进行详细的讨论。
如果字段的内容需要包含在算式中,则必须选择“数字”或“货币”数据类型。由其他数据类型定义的字段内容不能用到算式中。这个规则唯一的例外就是“日期”字段,它可以包含在日期/时间算式中。
用户还必须考虑是否要对字段中的数据进行排序及是否对其进行索引。OLE字段、附件字段和超链接字段不能用于排序,因此,对于那些字段中的数据要用于排序或索引的字段,就不应该选择这样的字段类型。而且,还要考虑到数据排序的方式。例如,在一个文本字段中,数字集合是按其所出现的次序排序的(也就是说以1,10,100,2,20,200这样的次序排序),这是因为“文本”字段中的数据按标准的ACSII顺序。然而,在“数字”字段和“货币”字段当中,数字的排序是按照数值的升序(即按1,2,10,20,100,200排序)。用户也许会认为自己根本没有必要按标准的ACSII顺序,但是,在对部门代号这样的信息进行排序时,应该使用这种排序方式。利用Access 2007可以排序或分组“备注”字段的内容,但是它实现这种排序或分组的功能只能基于前255个字符。最后应该考虑磁盘空间对自己来说是否特别重要。由于不同类型的字段在硬盘上所占用的存储空间不同,因此在选择字段的数据类型时,也应该考虑到这一点。
Access可以使用多种字段类型,即文本、备注、数字、日期/时间、货币,自动编号、是/否、OLE对象、附件和超链接。表2.1给出了各个字段类型的使用情形及其所占用的存储空间。
注意
超链接字段类型包含一个超链接对象。超链接对象包含3个部分。第1部分叫做显示文本,这是指显示在字段或控件上的文本;第2部分是用于引用字段的实际文件路径(UNC)或网页(URL);第3部分是子地址,它表示文件和网页中的位置。
选择字段类型的难点在于确定在给定情况下使用何种类型才是最佳的。下面给出各个字段类型的详细描述及其使用情形。
2.4.1 文本字段:最常用的字段类型
大多数字段都是文本字段。许多开发人员并没有意识到这一点,对于那些不用于算式中的数字最好使用文本字段。这样的例子有电话号码、部门代号和邮政编码等。虽然说文本字段的默认大小是50个字符,但是文本字段可以存储多达255个字符。由于Access是动态分配磁盘空间的,因此大尺寸字段并不使用硬盘空间,当然,尽可能地申请小的字段可以提高运行性能。文本字段所允许的最大字符数目由“字段大小”属性进行控制。
2.4.2 备注字段:处理较长的注释和说明
备注字段可以存储最多65 536字节的文本,它可以使每个记录容纳多达16页的文本。备注字段对以表数据存储的各种备注类型来说是较好的选择。请记住,在Access 2007中备注字段可以用于排序。
2.4.3 数字字段:计算
数字字段用于存储必须要包含到算式中的数据。如果货币数目要包含到算式当中,或者算式要求较高的精度,那么应该选择货币字段,而不应该选择数字字段。数字字段实际上是好几种字段类型的组合,因为Access 2007提供了7种大小的数字字段。“字节”可以存储的整数为0~255,“整型”可以存储的数字大小为−32 768~32 767,“长整型”可以存储的数字大小为−20亿~20亿。虽然说这三种大小类型具有较好的性能,但是,可以明显地看出它们所要求的存储空间逐渐增大。另外两种数字字段类型是“单精度型”和“双精度型”,它们能提供十进制浮点数,因此运行起来相对较慢。“单精度型”可包含7位小数,而“双精度型”可包含14位小数。“小数”是Access 2002中引入的数字数据类型。小数数据类型允许存储较大的数字,并且提供最高28位数字的精度。最后一种类型是“同步复制ID”,它用于提供数据同步过程所要求的唯一的标识符(应用于.MDB文件格式中)。
2.4.4 日期/时间字段:跟踪事件的发生
日期/时间字段用于存储有效的日期和时间。日期/时间字段可以执行日期运算,它能保证日期和时间的排序准确无误。实际上,Access在内部是以8字节的浮点数存储日期和时间。时间是表示一天的一部分。
注意
在Windows控制面板中的日期和时间设置会反映到数据当中。例如,如果在控制面板当中修改“区域设置”中的“短日期格式”,那么这种修改将迅速地反映到窗体、报表和数据表当中。
2.4.5 货币字段:存储钱数
货币字段类型是一种特殊的数字字段,当用户要将货币值存储到表中的时候,就会使用到它。货币字段能防止数据运算的截尾运算。它用15位数来存储“元”,同时又能保证“分”计算的准确性。虽然说这种类型的字段运算准确,但是它的处理速度较慢。
注意
在Windows控制面板中的货币格式修改会反映到数据当中。当然,Access并不能自动执行货币数目的实际转换。同日期一样,如果在控制面板当中修改“区域设置”中的货币格式,那么,这种修改将迅速反映到窗体、报表和数据表当中。
2.4.6 自动编号字段:唯一的记录标识符
当添加一个记录之后,Access会自动生成自动编号字段。在Access以前的版本中,计数器的值必须是有序的。在Access 2007中,自动编号字段类型既可以是有序的,也可以是随机的。当多个用户在脱机情况下同时添加数据时,随机分配非常有用,因为Access不可能为两个记录指定同一个随机值。同步复制ID是自动编号字段的一个特殊类型。这个随机产生的唯一数字在复制过程(应用于.MDB文件格式中)中能生成唯一的标识符,它用于保证数据库的复制同步。
对于有序的自动编号字段,需要注意以下几点。如果用户从一个表中删除了一条记录,那么其唯一的编号将永远流失。同理,如果用户在一个表中添加了一条记录然后又取消了,那么与这条记录相对应的唯一的计数器值也将永远流失。如果不能接受这种结果,那么就应该生成自己的计数器值。
提示
对于字段名称,如果想要将Access数据库升迁到客户/服务器数据库,那么就必须知道所选的字段类型。例如,Access输出“自动编号”字段为“长整型”。由于一些非Microsoft的数据库服务器不支持自动编号,所以用户必须在服务器上创建一个插入开关,用来提供下一个键值。还可以通过使用窗体级事件完成自动编号,但是这么做不可取,因为如果其他应用程序在访问该数据,那么数据库引擎不能强迫编号。如果是升迁到Microsoft SQL Server,那么Access 2007的“升迁向导”就会将所有“自动编号”字段转化为“标识”字段(SQL服务器上等价于自动编号)。
2.4.7 是/否字段:从两个答案中选择一个正确答案
可以用是/否字段来存储一个逻辑是或逻辑否。实际上,“是”在字段中是以“1”存储的,而“否”在字段中是以0存储的。此外,Null表示没有选择。字段的显示格式决定了用户所能看到的选项(一般有是/否、对/错和开/关,如果将其三态属性设为“真”的话,则还有第3种选项“空”)。是/否字段特别适合于那些只有“是”和“否“两个逻辑值的数据。它不仅能够限制用户的无效选择,而且能够节约存储空间。
2.4.8 OLE对象字段:具有强大的存储功能
OLE对象字段是用来存储在Windows中注册的OLE服务器应用程序的数据,包括电子表格、字处理文档、声音和视频。OLE对象字段的应用非常广泛,应用的例子包括用来存储履历、对雇员的评语、预算或视频。但是,在大多数情况下,不要将文档本身存储在OLE对象字段当中,还是使用超链接存储文档的链接更为方便。
2.4.9 附件字段:在单个字段中存储多个文件
使用附件字段类型,可以在单个字段中存储多个附件。这些附件甚至可以是不同类型的。例如,可以在一个字段中使用Excel数据表和Word文档。“附件”字段可以用来代替它的前任 —— OLE对象字段。使用OLE对象字段,Access可以在Access数据库中存储对象的位图,这会使数据库膨胀。而Access在“附件”字段中存储数据,这样会更有效。
“附件”字段还有额外的优点。例如,Access会着色图像文件,并且显示与其他文件类型相关的程序图标。如果字段包含照片、数据表和Word文档,那么Access就会显示该图像,并会给其他对象展示该应用程序图标。Access在存储对象时会压缩它们,除非这些文件已经被压缩了。最后,用户可以通过编程来操作附件。
有关“附件”字段还有一些值得注意的其他事情。每个数据库支持最大2GB的数据附件,并且每个附件必须小于256MB。必须使用“附件”对话框(如图2.7所示)编辑和管理附件,除非用户使用程序管理它们。
2.4.10 超链接字段:实现与Internet的链接
“超链接”字段用来存储统一资源定位符地址(URL),它用于与Internet上的全球Web页或在内部网上实现链接。超链接字段也用来存储通用命名约定(Universal Naming Convention,UNC)路径,它用于实现与文件路径的链接。超链接字段类型分为以下3个部分:
用户所见到的东西;
URL或UNC;
子地址,如区域名或书签。
当在超链接字段中放置了一个项目之后,这项便充当一个对应于自己所指定的文件或Web页的直接链接。2.10节将对超链接进行详细讨论。