【Access小品】有关系?没关系?啥关系?-煮江品茶
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 程序人生


【Access小品】有关系?没关系?啥关系?

发表时间:2013/4/12 16:47:44 评论(3) 浏览(6837)  评论 | 加入收藏 | 复制
   
摘 要:【Access小品】有关系?没关系?啥关系?
正 文:

  版友小陈同志问了两个关于关系的问题,其一是“主键字段为文本型规范吗?”,其二是“表间全没有建立一对多关系好不好?对窗体、查询、报表的设计会带来什么影响?”

 

  所谓关系是指事物之间的联系。朝鲜要与美日韩较劲,中俄跟着着急,这就表明这些国家间存在某种特殊的关系。这个世界事务和事情很多,所以关系也就无处不在无处不有。所以描述事物通常都需要描述关系,怎么描述关系呢?其实很简单,无非是有关系?没关系?啥关系?

 

  闲话少说,书归正传。下面来解答小陈同志的两个问题。

 

  第一个问题的解答:

 

  1、主键的作用在于唯一性的标识记录,所以主键是什么类型的数据都可以,重点是每条记录上的主键值不能重复。

 

  2、通常主键选用自动编号数据类型(实际是长整型,只是数据库做了自增的处理)较为妥当,其优点在于不必要另外写自动编码的函数。如果选用其他类型的数据,需要写一个自定义函数来解决自动编号的问题,已满足唯一性的要求。

 

  第二个问题的解答:

 

  1、在数据表设计时,设计数据表的关系并不是先决条件。所谓表间建立关系,实际上是建立表的约束条件,也就是说确定一个表是否依赖另一个表。我们不建立关系,也并不是不利用表之间的关系,否则的话数据的组织就无规律可循了。只是在于我们怎么样去表达这种关系而已。表达一个主表和一个子表之间的关系,我们大体可以有这么几种办法:

 

  (1)通过关系视图建立表间关系;

 

  (2)在查询的视图中建立表间关系;

 

  (3)在VB中通过编写sql语句(常用语窗体或控件的数据源,或者ADO代码等),或者其子句(常用语筛选时)。

 

  2、为什么通常都需要在关系视图中建立表间关系呢?其道理在于一旦在关系视图中设计了表间关系,在其后设计查询、校验数据等方面Access就会提供很多的自动的功能,也就是说你不必在多余写很多代码来解决这些问题。这能极大的提高开发和维护的效率。

 

  3、凡事有利便有弊,有些情况下事先设计了表间的关系,也会带来很多的麻烦。举个典型的例子:假设我们有一个授课表,这个表会存在几个父表,大体应该有教师表、学科表、班级表。如果事先我们建立了授课表与其三个父表之间的关系。那么授课表的记录就会受到这三个表的同时约束,也就是,一条授课表记录,必须同时录入教师ID、学科ID和班级ID。这样的约束在现实中会出现问题,在安排很多教师的课程表时,几个方面的资源(师资、时间资源、学科资源、班级资源等)是不可能即刻确定的,可能需要反复调整。这样一种现实的情况,表示在录入一条授课记录时,总会有一些外键(教师ID、学科ID或班级ID)是不确定的。如果你又事先建立了表间的关系,那么这条记录你就没法录入了。

 

  当然你可以采取一些变通的处理,比如在学科表中建立一个"待确定学科"记录,在班级表中建立一个“待确定班级”记录。这样确实能解决问题,不过你将为其他地方的处理花费代价,比如你需要在班级筛选学生时,过滤掉这条“待确定班级”记录等等。除了这种处理外,可能还存在其他基于建立了数据表关系后,对此类问题的变通处理。不过都会存在跷跷板效应,也就是说简化了一处,其它诸多地方繁琐了。

 

  那么在诸如此类,一子多父的情况下,我们一般只事先建立一对父子关系,其他的父子关系,我们可以按照上述1中的一些办法来处理之。至于应该建立那一对父子关系,这就要看实际问题和你对问题的判断和考虑了。以授课表为例,应该建立的父子关系为教师表和授课表,其他两个父子关系大体不需要先建立。


Access软件网交流QQ群(群号:198465573)
 
 相关文章
VBA创建和删除各种表关系  【纵云梯  2012/4/7】
[access查询]用关系运算实现的精确用户角色功能授权模型  【丘山  2012/5/26】
【Access函数】删除所有的关系  【Allen Browne  2012/8/9】
关于一表多个字段和另一表同一个字段建立关系查询问题  【蒋元根  2012/8/19】
二级Access数据库备考笔记之关系数据模型   【缪炜  2012/11/16】
Access运行时错误'3022':由于将在索引、主关键字、或关系...  【麥田  2012/11/25】
常见问答
技术分类
相关资源
文章搜索
关于作者

煮江品茶

文章分类

文章存档

友情链接