数据库设计基础
时 间:2008-04-23 08:03:13
作 者:UMVSoft整理 ID:1445 城市:上海
摘 要:
正 文:
将信息项转换为列
要确定表中的列,请确定需要跟踪表中所记录主题的哪些信息。例如,对于“客户”表,“姓名”、“地址”、“市-省/自治区-邮编”、“发送电子邮件”、“称呼”和“电子邮件地址”就是不错的列初始列表。表中的每条记录包含同一组列,因此,可以为每条记录存储“姓名”、“地址”、“市-省/自治区-邮编”、“发送电子邮件”、“称呼”和“电子邮件地址”。例如,“地址”列包含客户的地址。每条记录包含有关一位客户的数据,而“地址”字段包含该客户的地址。
为每个表确定了初始的一组列后,可以对列进行进一步优化。例如,将客户姓名作为两个单独的列存储是有用的:即“名字”和“姓氏”,以便仅在这些列上进行排序、搜索和索引操作。类似地,地址实际上包含五个独立的组成部分:地址、城市、省/市/自治区、邮政编码和国家/地区,也可以将这些信息存储在单独的列中。例如,如果希望按照省/市/自治区执行搜索、筛选或排序操作,则需要将省/市/自治区信息存储在单独的列中。
还应该考虑数据库是仅存储国内的信息,还是也要存储国际信息。例如,如果打算存储国际地址,则最好使用“地区”列代替“省/市/自治区”列,因为这样的列既可能存储国内的省/市/自治区,也可能存储属于其他国家/地区的地区。同样,如果要存储国际地址,则采用 Postal Code 比使用 Zip Code 更有用。
下面的列表显示了用于确定列的一些提示。
- 不要包含已计算的数据
大多数情况下,不应在表中存储计算结果。在希望查看相应结果时,可以让 Access 执行计算。例如,假如有一个“已订购产品”报表,该报表显示数据库中每类产品的已订购数量的分类汇总。不过,在所有表中都没有“已订购数量”分类汇总列。相反,“产品”表中包含存储每种产品的已订购数量的“已订购数量”列。通过使用该数据,Access 可以在每次打印报表时计算相应的分类汇总。而分类汇总本身不应存储在表中。
- 将信息按照其最小的逻辑单元进行存储
您可能非常想使用单个字段存储全名,或使用单个字段存储产品名称和产品说明。如果将一种以上信息存储在一个字段中,则在以后要检索单个事实就会很困难。请尝试将信息拆分为多个逻辑单元,例如,为姓氏和名字或为产品名称、类别和说明创建单独的字段。
对每个表中的数据列进行优化后,就可以选择每个表的主键了。
指定主键
每个表应包含一个列或一组列,用于对存储在该表中的每个行进行唯一标识。这通常是一个唯一的标识号,如雇员 ID 号或序列号。在数据库术语中,此信息称为表的主键。Access 使用主键字段将多个表中的数据关联起来,从而将数据组合在一起。
如果已经为表指定了唯一标识符(如唯一标识目录中的每种产品的产品编号),就可以使用该标识符作为表的主键,但仅当此列的值对每条记录而言始终不同时才能如此。主键中不能有重复的值。例如,不要使用人名作为主键,因为姓名不是唯一的。很容易在同一个表中出现两个同名的人。
主键必须始终具有值。如果某列的值可以在某个时间变成未分配或未知(缺少值),则该值不能作为主键的组成部分。
应该始终选择其值不会更改的主键。在使用多个表的数据库中,可将一个表的主键作为引用在其他表中使用。如果主键发生更改,还必须将此更改应用到其他任何引用该键的位置。使用不会更改的主键可降低出现主键与其他引用该键的表不同步的几率。
通常将任意唯一数字作为主键使用。例如,可能会为每个订单分配一个唯一的订单号。订单号的唯一用途是对订单进行标识。分配后,订单号就永远都不更改。
如果尚未确定可能成为好的主键的一个或一组列,请考虑使用具有“自动编号”数据类型的列。使用“自动编号”数据类型时,Access 将自动为您分配一个值。这样的标识符不包含事实数据,即不包含描述它所表示的行的事实信息。不包含事实数据的标识符非常适合作为主键使用,因为它们不会更改。包含有关某一行的事实数据的主键(如电话号码或客户名称)很有可能会改变,因为事实信息本身可能会更改。
在某些情况下,您可能想使用两个或多个字段一起作为表的主键。例如,存储订单行项目的“订单细节”表将在其主键中使用两个列:“订单 ID”和“产品 ID”。当一个主键使用多个列时,它又被称为复合键。
对于产品销售数据库,可以为每个表创建一个自动编号列作为主键使用:为“产品”表创建“产品 ID”、为“订单”表创建“订单 ID”、为“客户”表创建“客户 ID”、为“供应商”表创建“供应商 ID”。
创建表关系
既然已经将信息划分到各表中,接下来需要一种方法,以有意义的方式再次将信息组织到一起。例如,下面的窗体包含来自几个表的信息。
此窗体中的信息来自“客户”表……
Access软件网QQ交流群 (群号:54525238)
Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)