Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

关于主键的几个问题?

大头  发表于:2010-07-31 12:20:49  
复制

我最近买了本access的书自学,看到主键这里有些疑惑,特请教大家,谢谢

 

  书上有这么几句话:1、一个主键可以包含多个字段。

                    2、 一个表只能 有一个主键。

                    3、 表的主键可以自动建立索引,而且该索引被称为无重复索引。

 

  疑惑1、这几句话正确吗?若是正确那么怎么理解好几个字段为同一个主键呢?

  疑惑2、主键必需为不重复的数值吗?

  疑惑3、一个表必需为其设置主键吗?我为什么看到有的表没有主键呢?

                  

 

Top
武凡 发表于:2010-08-01 15:45:23
我补充一个问题:假如一个表中没有不重复的数值字段如何定主键呢?

红尘如烟 发表于:2010-08-01 16:06:00

主键的作用主要是对一个表中的记录进行唯一标识,既然是唯一标识,自然就不能允许有重复了,这样根据主键可以识别任何一条记录,大部分情况下,主键一个字段就可以了,但在某些情况下,一个字段并不能对记录进行唯一标识,所以就需要通过多个字段的组合来进行唯一标识,比如订单明细表中,主键一般是【订单号】和【产品编号】这两个字段的组合。

 

一个表只能有一个主键的,是因为主键也叫做主索引,一个表中可以有多个索引,但用作主索引的只能有一个,有多个就不应该叫“主索引”了。

 

按照关系数据库理论来说,每个表都必须要有主键的,另外在ACCESS中以链接表的方式访问SQL SERVER数据库,如果表中没有主键,则数据会是只读的,不能编辑。

一个表中没有主键多半是下面的几种情况:

1、不是一个数据库系统,或者说不完全是一个数据库系统,这时表只用来存放数据,数据的有效性不是通过数据库引擎来检验的,而是通过程序代码来检验的

2、这是一个临时表,在临时表中为了使用方便,经常会不设临时表

3、这是一个特殊用途的表,比如保存某些设置,它其实都不能算是严格意义上的表了,而是相当于配置文件

……

 

如果表中没有适合设为主键的字段,这时一般建议创建一个自动编号字段来做为主键

 



煮江品茶 发表于:2010-08-01 16:45:48

  先从第三个问题说起。主键对于数据表不是必须的,也就说数据表不设主键完全可以。撇开主键的问题,我们说部电影吧。看过成龙演的《我是谁》这部电影吧,还记得哪个忘记自己名字和身份的警察吧。我们假设一下,如果成龙扮演的这个警察身上还有一个证件的话,即使他不记得自己是谁,他身边出现的美女应该是可以知道他是谁的。也就是说警察证或者身份证或者护照或者什么本本上,总是会有一个编号,这个编号可以通过查询得到这个人的信息,并唯一的定义这个人是谁。


  你会想这个电影和主键有什么关系呢?其实我们讨论这个电影的时候已经在讨论主键问题了。什么是主键呢?通俗的讲,主键就是用来唯一定义一条记录的那个东西。这就说明,主键的作用是用来唯一定义一条记录的,当然你不唯一定义这个记录,他依然存在。就像电影中的成龙同志,在失去身份的很长一段时间中依然存在一样。只是这种存在有了很多麻烦,带来很多冲突,也就构成了电影的崎岖的情节。


  现在讨论第二个问题。主键用来唯一定义记录,因此必然数据不能重复。可是为什么要这样呢?这就要讲讲《西游记》了,还记得那个假悟空六耳猕猴吗?这斯能将大圣扮得维妙维肖,最后还是被如来说破。这就看出来,如果描述悟空不是唯一的,真假就说不清楚了。也许你想着让他(真悟空)保护唐僧取经,却可能让他(假悟空)吃了唐僧肉了。


  在后两个问题讲解完了,第一个问题也就不成其为一个问题了。比如说用成龙这个名字是否能准确的定义一个人呢?答案是不能,因为重名的可能有很多,所以人名不具有唯一性。用人名加出生日期是否可以定义一个人呢?这个也可能不安全,因为还可能有姓名相同生日相同的人存在,只是这个概率很小了而已。那么我们多加几个字段,在你的数据库范围内能保证数据唯一,这时候就可以以这几个字段一起来作为主键唯一的定义这条记录了。不过通常这样干很累,于是人们多数情况下是单独设立一个字段作为主键。


  关于武凡同志的问题已经不存在了。因为我们可以不管表中是否存在一组数据能成为主键,都可以另外加一个做为主键的字段。而且大部分情况下,人们都是这样干的。



武凡 发表于:2010-08-02 14:37:23
两位老师讲的很透彻了,学习了……

殷小宝  发表于:2010-08-04 21:04:02

索引就是通过它能够快速地找到她.相当于目录或地址一样.至于有重复索引和有无重复索引,也可能这样理解:有重复索引就是几个东东都可以通过这个索引就能找到.



yes 发表于:2010-09-08 23:14:59
学习了!!!

总记录:6篇  页次:1/1 9 1 :