设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 8616|回复: 27
打印 上一主题 下一主题

[表] 请教数据表的规划

[复制链接]
跳转到指定楼层
1#
发表于 2011-5-26 10:32:47 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
我知道,为了避免数据的重复,实施参照完整性,在数据表里需要采用一对多,一对一等关系,我想了解两个问题:
1.有没有必要建立关系?有个朋友给我说,没必要建立关系之类的,因为在窗体输入数据时就可以判断和确定数据之间的关系。
2.像我这附件里的几个表,应该如何规划才合理呢。
这几个表是:tblgr(工人)tblgx(工序)
tblgxgr(工序下的工人,字段值是工序和工人的名称)

tblgxgr_id(工序下的工人,字段值是工序和工人的id)

那么,从数据库的后期设计比如窗体,查询,报表等及维护来看,工序下的工人表应该采用tblgxgr表好还是tblgxgr_id表好呢,为什么呢。

附件:  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2011-5-26 15:12:13 | 显示全部楼层
roych 发表于 2011-5-26 11:14
1、尽管建立了关系可以级联删除,便于删除相关的所有记录,但这并不少非做不可的。像我们公司用的几个系统都 ...

以前我在论坛上遇到一个朋友,他是不用关系,而且他不用查询,宏,至于查询和宏,他都是用代码来确定,但他也强调,表结构很关键,表结构做好了,后面的设计就做好一半了。

我也不知我是怎么的,老是在关系和用代码确定数据关系中游离不定,总想弄清什么名堂,但又说不清楚我到底想要知道什么。

tblgxgr-id表在该数据库中是显得多余,但我看见很多数据库里,往往选择的是类似tblgxgr-id结构的表,而不是类似tblgxgr结构的表。在该数据库里,我之所以考虑tblgr工人表,是想到工人的排序,比如用工号grid排序。

3#
 楼主| 发表于 2011-5-27 15:19:54 | 显示全部楼层
谢谢楼上各位热心的朋友,让我懂得了不少东西。
4#
 楼主| 发表于 2011-5-27 21:30:41 | 显示全部楼层
本帖最后由 简 于 2011-5-28 08:10 编辑

我想再请教一下,以todaynew老汉的表结构数据库为例,我想统计加工表中工序id为刨的个数,其程序代码该怎么写呢?

我原来写成me.txt0=DCount("*", "加工表", "[工序id]<> '刨'"),运行错误,我也知道原因是工序id值是长整型,而刨是字符型,类型不匹配。

那么,像这种情况,代码该怎么写呢?难道应该是:
me.txt0=DCount("*", "加工表", "[工序id]=1”)

根据工序id的字段值,我不一定能晓得刨对应1,车对应2,磨对应3呀……

还有,既然工序id值是长整型,为什么字段值能保存成字符型如刨,钳等呢。

在加工表中,我需要通过工序(或工人)进行大量的筛选查找,建立查询,报表等,这时在加工表中,我应该将工序(或工人)设计成工序id(工人id)好呢,还是工序名称(或工人姓名)好呢?
5#
 楼主| 发表于 2011-5-28 23:07:49 | 显示全部楼层
todaynew 发表于 2011-5-28 19:52
呵呵,鬼打架的,你也不能一口气搞这么多问题呀。

1、统计问题应该如下解法:

回todaynew老汉:

看了你的回复,我大概晓得应该如何处理了,但我心中还有个疙瘩没有解开。以你的表结构为例,我以往在没有考虑表结构时,在加工表里我就会如下图设置:


然后在子窗体里,对工序我设置如下:

我觉得这样的设置一目了解,不需要拐弯抹角,当然,关系也就不起作用了。
看了一些实例后,发现对于类似情况,它们在表结构上都没有像我这样设置和设计,而是通过关系,通过一对多,一对一之类的来处理。我就觉得挺奇怪,因为我没有发现我以前那样的设计有什么不妥,而且那样的设计也没有出现什么数据的重复性,相反我还认为我以前那样设计在程序代码上处理更方便,就比如统计在加工表里统计工序为刨的个数,如果用我以前的设计方法,即用工序字段,其代码就是:DCount("*", "加工表", "[工序]<> ''"),如果用工序id字段,代码Dcount("*","加工表","工序id=" & Dlookup("工序id","工序表","工序=''")),这还反而麻烦呢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
 楼主| 发表于 2011-5-28 23:49:10 | 显示全部楼层
还有:

我看前面有两个朋友认为,只需要tblgx表(工序表)和tblgxgr表(工序下的工人)两个表即可,为什么他们会有这样考虑呢。如果工人较多,近百个,是不是还是单独建立工人表要好些呢。

另外todaynew老汉说,工人与工序的联系是在有关描述加工的数据表中存在的。这种存在可以根据情况出现两种表达方式……所以老汉建立工序表,工人表,以及让工序和工人发生联系的加工表。

我建立tblgxgr表的目的,一是生产的实际情况,有工人从事两个工序,比如说张三工人在刨和铣两个工序里操作。二是为了提高输入效率,三是在筛选工人时缩小选择范围,四是为了统计的需要。比如说,我要输入工人彭五的名字,打字慢的同事不想输入的话,可能就在组合框里挨个挨个找,如果知道彭五所属的工序是磨的话,就可以先在工序组合框里选择磨,然后在工人组合框里就自动筛选出磨工序下有哪些工人,这样就可以快速选择出彭五工人来。为了统计的需要,打个比方说,我需要了解这个月刨工序接受了多少加工任务,产量是多少等,即按工序来进行统计。

这样分析来,tblgxgr表还有没有必要单独建立呢。
7#
 楼主| 发表于 2011-5-29 16:11:21 | 显示全部楼层
todaynew 发表于 2011-5-29 10:12
你还没有理解数据库设计的基本原理,呵呵。对于你的这几个问题,需要用倒叙来加以说明了。先从最后的问 ...

谢谢老汉,让你费心了,能不能将就我的例子进行修改,让我再好好学习与消化呢。
8#
 楼主| 发表于 2011-5-30 09:22:57 | 显示全部楼层
todaynew 发表于 2011-5-29 16:24
14楼的例子应该能说明问题了。

老汉,我还有些疑惑没有解决。

以你的表结构为例,当我在工序id里选择刨时,我希望工人id组合框里显示张三和王二,而不是所有工人。换句话说,张三和王二都是属于刨工序的。这种情况表结构和关系如何设计呢?

还有,如果张三既属于刨工序,又属于钳工序,九九既属于铣工序,又属于磨工序,这种情况下,表结构和关系又如何处理呢?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
 楼主| 发表于 2011-5-30 11:24:14 | 显示全部楼层
我在主窗体里输入数据时发现一个问题,就是工序id和工人id的数据必须输入,否则就会弹出错误提示,但在实际操作中,却有可能因种种原因出现数据没有全部输完,然后点击保存的情况,然后等数据核对清楚,或者有时间时再继续将数据补充完整。
这种情况又如何解决呢,能否躲开呢?
10#
 楼主| 发表于 2011-5-30 13:06:54 | 显示全部楼层
todaynew 发表于 2011-5-30 12:02
呵呵,怎么还不明白。筛选和表结构没什么关系。
1、前面的示例不是已经可以完成筛选功能:

我想你可能没完全明白我的意思。
我这个筛选不用于模糊查询,我希望是在输入数据时,比如在你的子窗体里输入数据时,当我在工序id里选择刨时,我希望工人id组合框里显示张三和王二,而不是所有工人。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-21 10:45 , Processed in 0.107197 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表