【access小品】问答主键
时 间:2010-08-01 16:54:16
作 者:todaynew ID:10802 城市:武汉
摘 要:问答主键
正 文:
大头同志的问题:我最近买了本access的书自学,看到主键这里有些疑惑,特请教大家,谢谢。
书上有这么几句话:1、一个主键可以包含多个字段。2、 一个表只能 有一个主键。3、 表的主键可以自动建立索引,而且该索引被称为无重复索引。
疑惑1、这几句话正确吗?若是正确那么怎么理解好几个字段为同一个主键呢?
疑惑2、主键必需为不重复的数值吗?
疑惑3、一个表必需为其设置主键吗?我为什么看到有的表没有主键呢?
武凡同志补充问题:假如一个表中没有不重复的数值字段如何定主键呢?
------------------------------------------
红尘如烟同志的解答:
主键的作用主要是对一个表中的记录进行唯一标识,既然是唯一标识,自然就不能允许有重复了,这样根据主键可以识别任何一条记录,大部分情况下,主键一个字段就可以了,但在某些情况下,一个字段并不能对记录进行唯一标识,所以就需要通过多个字段的组合来进行唯一标识,比如订单明细表中,主键一般是【订单号】和【产品编号】这两个字段的组合。
一个表只能有一个主键的,是因为主键也叫做主索引,一个表中可以有多个索引,但用作主索引的只能有一个,有多个就不应该叫“主索引”了。
按照关系数据库理论来说,每个表都必须要有主键的,另外在ACCESS中以链接表的方式访问SQL SERVER数据库,如果表中没有主键,则数据会是只读的,不能编辑。
一个表中没有主键多半是下面的几种情况:
1、不是一个数据库系统,或者说不完全是一个数据库系统,这时表只用来存放数据,数据的有效性不是通过数据库引擎来检验的,而是通过程序代码来检验的
2、这是一个临时表,在临时表中为了使用方便,经常会不设临时表
3、这是一个特殊用途的表,比如保存某些设置,它其实都不能算是严格意义上的表了,而是相当于配置文件
……
如果表中没有适合设为主键的字段,这时一般建议创建一个自动编号字段来做为主键
-----------------------------------------
煮江品茶同志解答:
先从第三个问题说起。主键对于数据表不是必须的,也就说数据表不设主键完全可以。撇开主键的问题,我们说部电影吧。看过成龙演的《我是谁》这部电影吧,还记得哪个忘记自己名字和身份的警察吧。我们假设一下,如果成龙扮演的这个警察身上还有一个证件的话,即使他不记得自己是谁,他身边出现的美女应该是可以知道他是谁的。也就是说警察证或者身份证或者护照或者什么本本上,总是会有一个编号,这个编号可以通过查询得到这个人的信息,并唯一的定义这个人是谁。
你会想这个电影和主键有什么关系呢?其实我们讨论这个电影的时候已经在讨论主键问题了。什么是主键呢?通俗的讲,主键就是用来唯一定义一条记录的那个东西。这就说明,主键的作用是用来唯一定义一条记录的,当然你不唯一定义这个记录,他依然存在。就像电影中的成龙同志,在失去身份的很长一段时间中依然存在一样。只是这种存在有了很多麻烦,带来很多冲突,也就构成了电影的崎岖的情节。
现在讨论第二个问题。主键用来唯一定义记录,因此必然数据不能重复。可是为什么要这样呢?这就要讲讲《西游记》了,还记得那个假悟空六耳猕猴吗?这斯能将大圣扮得维妙维肖,最后还是被如来说破。这就看出来,如果描述悟空不是唯一的,真假就说不清楚了。也许你想着让他(真悟空)保护唐僧取经,却可能让他(假悟空)吃了唐僧肉了。
在后两个问题讲解完了,第一个问题也就不成其为一个问题了。比如说用成龙这个名字是否能准确的定义一个人呢?答案是不能,因为重名的可能有很多,所以人名不具有唯一性。用人名加出生日期是否可以定义一个人呢?这个也可能不安全,因为还可能有姓名相同生日相同的人存在,只是这个概率很小了而已。那么我们多加几个字段,在你的数据库范围内能保证数据唯一,这时候就可以以这几个字段一起来作为主键唯一的定义这条记录了。不过通常这样干很累,于是人们多数情况下是单独设立一个字段作为主键。
关于武凡同志的问题已经不存在了。因为我们可以不管表中是否存在一组数据能成为主键,都可以另外加一个做为主键的字段。而且大部分情况下,人们都是这样干的。
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.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)