Office中国论坛/Access中国论坛

标题: ACCESS基础表如何设计?急需解答 [打印本页]

作者: lgbs_bl    时间: 2009-12-29 10:25
标题: ACCESS基础表如何设计?急需解答
本帖最后由 lgbs_bl 于 2009-12-29 10:27 编辑

前段时间碰到个问题
基本情况:
1、某公司有产品200多个,每个产品(共有零件200个左右)有4、5个部件,每个部件有40个左右的零件
2、每个产品都有独属本产品的零件,同时又借用其它产品的零件
3、一个零件在不同产品中的数量并不完全相同
4、每个零件的属性可能是自制件、标准件、外协配套件三中属性之一,
5、产品的数量每年都在增加,平均每年都可能增加50个左右
想达到的目的
1、常规统计查询
2、统计每个零件在200多个产品中被什么产品所用?数量分别是多少?总数多少?
或者是每个零件在任意指定的若干个产品中被哪些产品所用?数量是多少?总数多少?
问题:
该如何设计基础表?
设想A:
表1:零件汇总表:字段包括——图号(主键)  名称  规格(主键)  材料  (自制或外协或标准)
表2~200 :产品明细表(每个产品单独建一个表):字段包括——图号(主键)  所属产品 所属部件 数量
关系:利用图号将所有表联系起来,以备查询及统计计算
这种方案优点是每个表都很简单,单个表基本没有记录的冗余,但在建立表间关系时太烦,几百个产品啊,而且新增产品时都要重新添加关系。
设想B:表1:零件汇总表:字段包括——图号(主键)  名称  规格  材料  (自制或外协或标准)
表2:产品及零件汇总表(所有产品在一张表中,依靠主键的设置区分产品类别):字段包括——图号(主键)  规格(主键)  所属产品(主键) 所属部件(主键) 数量
关系:利用图号将所有表联系起来,以备查询及统计计算
这种方案的优点是表间关系简单,新增产品时方便,缺点是表2比较复杂也太大了(查询时速度慢),记录大量冗余(因为零件的借用关系),而且随着产品的增加,表2的记录数也大幅增加
请各位达人评论下设想A和B该如何选择,或是有其它设想C?
此问题困扰我多时,恳请各位不吝赐教,感激不尽!在此拜谢
作者: lgbs_bl    时间: 2009-12-29 10:41
本帖最后由 lgbs_bl 于 2009-12-29 10:43 编辑

是不是我问的问题太小儿科了?各位达人哪去了?都说这论坛人气不错,没感觉啊
作者: tz-chf    时间: 2009-12-29 10:58
方案一。需要的话参考我的生产流程进销存(原料《零件》-半成品《部件》-产品)
作者: 红尘如烟    时间: 2009-12-29 14:41
只要4个表就行了
[attach]40996[/attach]
作者: tz-chf    时间: 2009-12-29 14:55
4楼“产品_部件_零件表”不好,应该建“部件_零件表”。
作者: 红尘如烟    时间: 2009-12-29 15:33
5# tz-chf

主要是从逻辑上来讲“产品_部件_零件”表是“产品_部件”表的子表,而“产品_部件”表又是“产品”表的子表,所以才这样命名的,不然要是对象多了,找起来来比较麻烦,这个我已经成习惯了,随手一写就那样了……
作者: lgbs_bl    时间: 2009-12-30 11:09
感谢4楼达人的示例,看您的意思你偏向设想2,是不是?
但同样的问题是您示例表中有个“产品_部件_零件”表,这个表中包括了所有的产品及零部件,这个表中有很多的重复零件,因为如果新增一个产品,这个表就将增加200多个记录,一年就是1万多个。
是不是只能这样做,没有更好的办法了?
作者: 红尘如烟    时间: 2009-12-30 14:24
7# lgbs_bl

你需要记住这样一句话:字段是昂贵的,记录是免费的。
你添加一个产品,“产品_部件_零件”表中会添加200条记录,这个其实一点也不多。
按你说的一年增加50个产品,也不过才1万条记录而已,这样用上10年才10万条记录,并不会造成数据库性能下降。
而你说的每个产品建一个表,那就成了每添加一个产品,都需要修改一次数据库设计,这明显违背了数据库原理。
作者: tz-chf    时间: 2009-12-30 14:40
我说的不是命名,是这个表设计不好,不但数据冗余,而且如果组成的部件或零件改动,或有可能相同部件在不同产品中的零件组成不一样,问题很麻烦。
作者: 红尘如烟    时间: 2009-12-30 18:14
嗯,这个是你之前没说清楚,导致我们各自的理解不一样
现在是一个零件可能在多个部件上使用,一个部件可能在多个产品上使用,那就还有几个问题要弄清楚:
同一个零件会不会在某一个部件上重复使用多次?
同一个部件会不会在某一个产品上重复使用多次?
作者: tz-chf    时间: 2009-12-31 08:58
10楼的这个不是什么问题,不可能都是1吧,数量而已。
9楼我的意思是你的那个表的“有可能”使相同部件在不同产品中的零件组成不一样。

楼主哪去了?
作者: chuang0321    时间: 2009-12-31 09:46
建议楼主在开发前先在纸上画一画表格,设计一下逻辑关系、需要的统计方式等。
作者: todaynew    时间: 2009-12-31 11:48
前段时间碰到个问题
基本情况:
1、某公司有产品200多个,每个产品(共有零件200个左右)有4、5个部件,每个部件有40个左右的零件
2、每个产品都有独属本产品的零件,同时又借用其它产品的零件
3、一个零件在不同 ...
lgbs_bl 发表于 2009-12-29 10:25

[attach]41037[/attach]

[attach]41038[/attach]

[attach]41039[/attach]

[attach]41040[/attach]

[attach]41041[/attach]

[attach]41042[/attach]
作者: tz-chf    时间: 2009-12-31 14:46
我只用两个表,产品表(包括产品、部件、零件,用标记字段区分)和组件表(不是这样的表名,说明而已,含产品ID,原料ID(即是产品表的产品ID),数量)
作者: todaynew    时间: 2009-12-31 14:59
本帖最后由 todaynew 于 2009-12-31 16:07 编辑
我只用两个表,产品表(包括产品、部件、零件,用标记字段区分)和组件表(不是这样的表名,说明而已,含产品ID,原料ID(即是产品表的产品ID),数量)
tz-chf 发表于 2009-12-31 14:46

思路一样。
只是把左侧三张表合为一张表,加一个分类字段;右侧两张表合成一张表,加一个分类字段。
产品表:
产品ID(主键)
类别(“产品”;“部件”;“零件”)
规格型号
计量单位
图号
来源(“标准件”;“自制件”;“外协件”)

构成表:
记录ID(主键)
产品ID(外键)
数量

这样处理的话,还是需要通过查询把数据按级分开,这样才能进行统计分析。
作者: tz-chf    时间: 2009-12-31 17:06
本帖最后由 tz-chf 于 2009-12-31 17:08 编辑

15楼构成表少了一个字段(就叫构成ID吧,以后和产品表产品ID连接)
我做在一个表里,产品可以由部件,也可以由零件组成,操作很简单。
只需简单标记就可以了,不需要用户知道这些,用户看到的是三种东西。
作者: todaynew    时间: 2009-12-31 17:22
15楼构成表少了一个字段(就叫构成ID吧,以后和产品表产品ID连接)
我做在一个表里,产品可以由部件,也可以由零件组成,操作很简单。
只需简单标记就可以了,不需要用户知道这些,用户看到的是三种东西。
tz-chf 发表于 2009-12-31 17:06

构成ID我写的是记录ID

对表的构建方法不同可能和每个人的习惯不一样有关,呵呵。
作者: tz-chf    时间: 2009-12-31 20:06
你把构成ID当主键就不对了。我说得不好,正好说成构成ID,我的表里是原料ID,以后和产品表里的产品ID连接的。
我们说得这么热闹,楼主不见了。
作者: todaynew    时间: 2009-12-31 20:41
本帖最后由 todaynew 于 2009-12-31 20:47 编辑
你把构成ID当主键就不对了。我说得不好,正好说成构成ID,我的表里是原料ID,以后和产品表里的产品ID连接的。
我们说得这么热闹,楼主不见了。
tz-chf 发表于 2009-12-31 20:06

对!似乎还差一个外键,可以叫做构成ID。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3