设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[表] 主键112个记录,字段32个收集7种数据建7张表遇到难题(附件是数据库)

[复制链接]
跳转到指定楼层
1#
发表于 2009-1-20 21:52:22 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
图片现在可以看了,并且我上传了数据库,请各位朋友帮助优化一下数据库中的表,好不好?
我刚开始学ACCESS,醉心于它强大的功能,但是我感觉我的表建得有问题。 


 有一ACCESS问题,希望好心人顺手帮一下。
  我用ACCESS 2003组建了一个项目管理数据库,用来管理我
工作上要用到的100多个项目编号的所有数据,效率一下子比以前
提高了好多,不过,我在处理以下这些数据时,隐隐觉得大大地
不妥,定有上佳之良策,让数据处理更加高效。
  建了7张表,分别收集7种数据类型:分配农户数,分配动物
数,传递农户数,传递动物数,培训期数,受训男人数,受训女
人数。每张表的主键(目前共112个)和字段完全一样(字段共32个)。
这6种数据类型相互关联紧密,比如分配农户和传递农户
要求和,分配和传递横向每个编号要求和,纵向112个编号也要求和。以后每
年要添加新的主键(项目编号),也要添加字段,即2009上,2009下,
2010上,2010下,2011上,2011下等等。

  目前表内的32个字段是:
1993上,1993下,1994上,1994下,1995上,1995下,1996上,
1996下,1997上,1997下,1998上,1998下,1999上,1999下,
2000上,2000下,2001上,2001下,2002上,2002下,2003上,
2003下,2004上,2004下,2005上,2005下,2006上,2006下,
2007上,2007下,2008上,2008下

  最后要汇总形成类似下图的一个查询结果。
1993~2008年,项目数据汇总结果:






  或者任意给定2个年份之间的数据自动按上表汇总,也可任意2个半年之间进行
汇总,最后得出需要的数据。ACCESS一定可以让我随心所欲地管理数据。只要原始
数据在那里,它就有办法帮我灵活处理。但是,我还是ACCESS未入门者,因此要
实现以上任务非常困难。


  以上数据统计需求是否可以采用一张表搞定?我建了7张表,
修改起来太也麻烦,比如添加了一个编号就要在另外6张表里去
相应添加,添加了一个字段,又得在其他表中去同样添加。

  查询时,现在的7张表也颇为麻烦,导出到Excel表里时,32
个字段一字排开,7种数据放在一起就是7x32=224列,看得我眼
花啊……我想能不能让它们在查询时就自动进行求和运算?还有,
我严重怀疑我这样建表太笨……有没有更好的办法?

  有人建议直接用EXCEL就行了,但是我的数据查询是灵活多变的,
以项目编号和时间作为关键查询条件,编号对应实施地点,是另一张
表(里面只有1个字段--实施地点,主键是项目编号),时间可以
灵活地设置,任一2年间都可以查询。用Excel的话,就没有办法与另
一张表的“实施地点”进行对应了。比如我要查这112个项目编号中,
在四川实施的编号对应的1998-2008年的所有“分配农户”数。据我
粗浅的数据库知识,用EXCEL好像不行的。


  以上敬盼解惑。





[ 本帖最后由 bluebird73 于 2009-1-21 10:46 编辑 ]

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
18#
发表于 2009-1-24 16:53:13 | 只看该作者
大体给你整理了一下,可能数据导入是会有错误你需自己核对.

本帖子中包含更多资源

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

x
17#
发表于 2009-1-22 20:32:22 | 只看该作者
1、一个项目怎么可能实施32年呢?呵呵,通常也就两三年一个项目吧?如果真都是长期项目也是一样管理。

2、因为你的七张表中都有项目ID,因此便可以按照这个项目ID进行分类统计。比如培训人数可以按照年度分组统计每年所有项目的培训人数;也可以按照项目ID分组统计该项目几年以来共培训的人数;还可以按照年度和项目ID分组,统计每个年度内各项目的培训人数。这些都是查询问题,需要在表建立起来以后,根据各种需要随时进行不同的分类统计。也就是说记录之间也是可以进行统计运算的。

3、在表的设计阶段着重应该关注的是表内和表间关系清晰明确,同时要减少数据冗余,使得后期的查询设计、窗体设计、报表设计等简单方便。你现在的主要问题在表的设计上不合理,要先从这个角度解决问题。

4、从你现有的数据来看,项目表是一个最为主要和基础的表,它和所有的表都在项目ID(你原来叫项目编号也一样)上建立一对多的表间关系。可以先把这个关系理清楚。

5、不必特别关心日期的问题,任何一个系统中日期必然是一个不可或缺的字段,因为事物的发展无不从时间维上展开。对于日期或者时间通常只能给一个字段,其道理在于时间在不断流逝,你总不能让字段无限增长吧?呵呵。所以必须将日期横向沿字段展开的思路变换为沿记录纵向展开的思路。这样并不意味着你没法看日期横向展开的数据,实现这个要求需要建立交叉查询而已。

[ 本帖最后由 todaynew 于 2009-1-22 20:53 编辑 ]
16#
 楼主| 发表于 2009-1-22 13:06:32 | 只看该作者
原帖由 todaynew 于 2009-1-22 11:34 发表


这个问题可以用以后的查询来解决,比如你想按年度横向展开表,这时你需要做一个交叉查询。


谢谢todaynew答疑解惑。我还是弄不明白,因为现在的焦点问题是:
1)每一个编号都要统计64个半年的七种数据(分配农户、传递农户、分配动物、传递动物、培训期数、受训男、受训女),这七种数据每半年都有新的数据产生。比如2009上又会有新的数据产生。我每一个半年都要录入一次,并且希望他们通过查询实现自动汇总。

2)你现在把统计期与项目编号对应起来,如何实现一个编号对应的64个半年的七种数据录入呢?

你有没有QQ号?我好想与你直接交流。我的QQ号是:75087986
15#
发表于 2009-1-22 11:36:40 | 只看该作者
半年度
建议直接用实际受训日期,然后用查询得到上下半年
14#
发表于 2009-1-22 11:34:57 | 只看该作者
原帖由 bluebird73 于 2009-1-22 10:41 发表
动物传递表:项目ID(外键),统计期,传递方向,传递数量
农户传递表:项目ID(外键),统计期,传递方向,传递数量
动物分配表:项目ID(外键),统计期,分配方向,分配数量
农户分配表:项目ID(外键),统计 ...


这个问题可以用以后的查询来解决,比如你想按年度横向展开表,这时你需要做一个交叉查询。
13#
发表于 2009-1-22 11:23:01 | 只看该作者
1、培训表:项目ID(外键),培训期次,性别,培训人数。

这样好像合理一些

2、此外应该是112*2=224条记录,呵呵。

3、Liwen同志所论和我说的基本一致,所不同的是他建议你把数据类型类似的表整合在一起,用一个类型字段区别,这样表系就更为简化一些。我基本维持你现在的表系,只是对表的结构提出一些建议。从易于理解的角度来说,你可以先按我的建议简化你的表,在此基础上按照他的意见进一步整合。这样可以循序渐进,同时现有数据的导入也要方便一些。

4、传递方向:是根据你表中的数据看,有上传下传的问题,用这个字段做一个上传还是下传的分类。

5、统计期是否就是我几十个半年的字段名?yes

[ 本帖最后由 todaynew 于 2009-1-22 12:38 编辑 ]
12#
 楼主| 发表于 2009-1-22 11:06:44 | 只看该作者
如果按Todaynew的建议,是不是培训表中成了下表这个样子?每一个项目编号要重复很多次,有多少个半年度就要重复多少次了。现在有64个半年度,每一个项目编号就要重复64次,共有112个项目编号,则共有记录数:112x64=7168.

这样行不行呢?感谢大家继续提供帮助。


项目编号         半年度        受训男        受训女        培训期次
22-0017-01        1998上        5        6        20
22-0017-01        1998下        32        11        13
22-0017-01        1999上        17        4        24
22-0017-01        1999下        52        2        22
22-0017-01        2000上        80        4        8
22-0017-01        2000下        61        5        5
22-0017-01        2001上        32        13        20
22-0017-01        2001下        41        7        13
22-0017-01        2002上        40        26        24
22-0017-01        2002下        88        4        15
22-0017-01        2003上        35        20        8
22-0017-01        2003下        9        40        5
22-0017-01        2004上        42        6        12
22-0017-01        2004下        74        6        3
22-0017-01        2005上        68        5        12
22-0017-01        2005下        39                2
22-0017-01        2006上        29        4        9
22-0017-01        2006下        38        10        17
22-0017-01        2007上        61        1        10
22-0017-01        2007下        53        28        12
22-0017-01        2008上        122        12        29
22-0017-01        2008下        42        10        3
22-0017-01        2009上        20        10        7
22-0017-01        2009下        41        10        13
22-0017-01        2010上        21        8        5
22-0017-01        2010下        17        6        6
22-0017-01        2011上        0        11        3
22-0017-01        2011下        46        4        2
22-0017-01        2012上        6        2        9
22-0017-01        2012下        11        4        10
22-0017-01        2013上        4        5        9
22-0017-01        2013下        2        13        17
22-0017-02        1998上        4        7        52
22-0017-02        1998下        5        26        5
22-0017-02        1999上        13        4        7
22-0017-02        1999下        7        20        13
22-0017-02        2000上        26        40        11
22-0017-02        2000下        4        6        9
22-0017-02        2001上        20        6        13
22-0017-02        2001下        40        5        9
22-0017-02        2002上        6        6        3
22-0017-02        2002下        6        11        1
22-0017-02        2003上        5        4        15
22-0017-02        2003下                2        4
22-0017-02        2004上        4        4        17
22-0017-02        2004下        10        5        9
22-0017-02        2005上        1        13        20
22-0017-02        2005下        28        7        12
22-0017-02        2006上        12        26        12
22-0017-02        2006下        10        4        6
22-0017-02        2007上        10        20        9
22-0017-02        2007下        6        40        5
22-0017-02        2008上        11        6        9
22-0017-02        2008下        4        6        13
22-0017-02        2009上        2        5        9
22-0017-02        2009下        4                3
22-0017-02        2010上        5        4        1
22-0017-02        2010下        13        10        15
22-0017-02        2011上        7        1        4
22-0017-02        2011下        26        28        17
22-0017-02        2012上        4        12        9
22-0017-02        2012下        20        10        9
22-0017-02        2013上        40        10        13
22-0017-02        2013下        6        10        9

[ 本帖最后由 bluebird73 于 2009-1-22 11:12 编辑 ]
11#
 楼主| 发表于 2009-1-22 10:48:56 | 只看该作者
Liwen兄的建议:

将表改字段改为:
项目编号 / 传递年份 /  传递值 / 传递类型(传递动物/分配动物/农户。。。)
这样只用四个字段,并且以后新增传递年份不用更改表了。

[ 本帖最后由 liwen 于 2009-1-21 13:34 编辑 ]
========

我试了一下,还是不好用呢?项目编号将会出现多个,比如:

项目编号      年份    数据    数据类型

22-0015-01    1998上   20     分配农户
22-0015-01    1998上      160      分配动物
22-0015-01    1998上   15     传递农户
22-0015-01    1998上   150     传递动物
22-0015-01    1998上   5      培训期数
22-0015-01    1998上   28     受训男数
22-0015-01    1998上   12     受训女数

是这样建表么?这样一来,“项目编号”就一定不能做为主键了,因为有重复数据。这样建表似乎可以解决这七种数据类型的统计,其他“一对一”的数据就采用主键的方式,比如项目编号对应的实施时间、预算、投资方等都是一对一的情况,可以采用主键方式。

这样是否可行呢?与第二位朋友todaynew的建议有何区别呢?

=======
项目表:项目ID(主键),中文名称,英文名称,批准日期,财政年度,结束日期,项目状态,评估时间,备注
实施方表:项目ID(外键),单位名称,实施地点,省份,区域,备注
投资方表:项目ID(外键),投资人名称,投资金额,投资条件,备注
培训表:项目ID(外键),培训期,培训人数
动物传递表:项目ID(外键),统计期,传递方向,传递数量
农户传递表:项目ID(外键),统计期,传递方向,传递数量
动物分配表:项目ID(外键),统计期,分配方向,分配数量
农户分配表:项目ID(外键),统计期,分配方向,分配数量
。。。。。
余下表按此思路设计便可。
[ 本帖最后由 todaynew 于 2009-1-21 15:23 编辑 ]
==================

Todaynew的建议我还在消化之中,感觉不太明白。希望能继续提供帮助。这个传递方向是什么意思呢?统计期是否就是我几十个半年的字段名?

[ 本帖最后由 bluebird73 于 2009-1-22 10:54 编辑 ]
10#
 楼主| 发表于 2009-1-22 10:41:51 | 只看该作者
动物传递表:项目ID(外键),统计期,传递方向,传递数量
农户传递表:项目ID(外键),统计期,传递方向,传递数量
动物分配表:项目ID(外键),统计期,分配方向,分配数量
农户分配表:项目ID(外键),统计期,分配方向,分配数量


请这位老师解释一下,这四张表中,如何做到统计几十个半年期数据的?因为项目ID在左边,右边对应字段,但你只设计了一个统计期,如何统计出一个项目ID对应的多个半年的数据,比如(1998上,1998下。。。。一直到2008上,2008下)

还有,分配方向是放什么数据呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-10 20:03 , Processed in 0.125322 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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