设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[表] 有关于BOM表关系的建立

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2015-11-8 15:55:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 doney88 于 2015-11-8 16:37 编辑

由于本人tblBOM表中是已 FMainID,FChildID 分别链接主物料表的FMaterialID字段,这样有两个字段同时链接一个表,我当初是关系设计是在两个表中建立一个关系,FmaterialId->FMainID,FMateiralID->FChildID。

当然这样的关系自然就不能事实参照完整性。在数据运行过程中就会带来大量的沉余数据(当然你也可以用代码去完善这个结构上的不足,只不过多浪费事件写代码,还要废脑细胞)。比如你删除了tblMaterial物料数据表中的某一个数据,TBLBOM中没有删除,那么在你加载树BOM的时候,可能就会出错。这个问题困扰了我很久。(数据库当然要严谨啦!:))

今天突然试试用其他的办法,就是再拉一个tblmaterial进关系视图,这样就可以出现了多的一个名字tblMaterial_1实际就是tblMaterial的克隆。
这样就有两个表,就分别作为tblBOm中FMainID,FChildID字段进行链接,并切实施完整参照性。

这样,无论你想删除某条物料,如果在之前BOM数据中引用过,都可以同时删除BOm的那条记录(无论是FMainID,还是FChildID)。根据你的数据流,跟业务留,你也可以禁止删除该条数据。

也许吧很多大神已经发现,但是这个对我是完全误打误撞,这种感觉很棒,所以发到群里得瑟一下。。哈哈。。


本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2015-11-8 16:08:21 | 只看该作者
这是复合主键,不一定能找到数据吧?

点击这里给我发消息

3#
 楼主| 发表于 2015-11-8 16:15:21 | 只看该作者
todaynew 发表于 2015-11-8 16:08
这是复合主键,不一定能找到数据吧?

对,以FMainID跟FChildID为复合主键,因为同一层BOM下肯定不会出现同一种关系。这样可以避免数据录入时候,重复录入。

不是很懂你的意思,什么叫不一定能找到数据?

FMainID跟FChildID 都对应着tblMaterial.FMaterialID字段(也就是你们专业的所说的外键吧)。

我测试过,在tblMaterial 中插入4条记录。
分别为 A 、 B、C、D。
在tblBom中分加入两条记录,记录A与B ,C与D的关系

FBOMID   |  FMainID   |   FChildID
   1           |        A         |        B
   2           |        C         |        D

我在tblMaterial表中无论删除 A,或者是删除D的记录,tblBom表中 1 跟2的的记录都会直接删除。
4#
发表于 2015-11-8 16:24:12 | 只看该作者
doney88 发表于 2015-11-8 16:15
对,以FMainID跟FChildID为复合主键,因为同一层BOM下肯定不会出现同一种关系。这样可以避免数据录入时候 ...

我的意思是说,物料编号到底是对应FmainID的还是对应FChildID的。

点击这里给我发消息

5#
 楼主| 发表于 2015-11-8 16:27:07 | 只看该作者
todaynew 发表于 2015-11-8 16:24
我的意思是说,物料编号到底是对应FmainID的还是对应FChildID的。

两个都对应

你可以看下我上传的图片的第二张。

tblMaterial 跟tblMaterial_1是同一个表,在编辑关系的时候,我把这个表引用了两次而已。
6#
发表于 2015-11-8 16:30:55 | 只看该作者
doney88 发表于 2015-11-8 16:27
两个都对应

你可以看下我上传的图片的第二张。

你要用查询向导试试。看看是否能得到两个不同的物料编号。

点击这里给我发消息

7#
 楼主| 发表于 2015-11-8 16:32:40 | 只看该作者
todaynew 发表于 2015-11-8 16:30
你要用查询向导试试。看看是否能得到两个不同的物料编号。

你是说我这样在FMainID跟FChildID 不能录入不同的对应的tblMaterial.FMaterialID的值是吗?
我上面做的测试,没有问题,可以录入。

点击这里给我发消息

8#
 楼主| 发表于 2015-11-8 16:38:14 | 只看该作者
todaynew 发表于 2015-11-8 16:30
你要用查询向导试试。看看是否能得到两个不同的物料编号。

我又上传了两张图片,你看下你说的是不是这个意思?
9#
发表于 2015-11-8 16:38:39 | 只看该作者
本帖最后由 todaynew 于 2015-11-8 16:40 编辑
doney88 发表于 2015-11-8 16:32
你是说我这样在FMainID跟FChildID 不能录入不同的对应的tblMaterial.FMaterialID的值是吗?
我上面做的 ...


明白了,你是按最后一个图做的。这样是可以。
最后一个图中,不需要设置组合主键,将主键设为FBomID比较合理。FMainID与FchildID是可能重复的。即使不允许其重复,也只是将其视为备选主键为好。

点击这里给我发消息

10#
 楼主| 发表于 2015-11-8 16:41:28 | 只看该作者
todaynew 发表于 2015-11-8 16:38
明白了,你是按最后一个图做的。这样是可以。
最后一个图中,不需要设置组合主键,将主键设为FBomID比较 ...

比如说我第一层的物料(FMainID - 成品A)肯定是通过下一层的物料{FChildID - 半成品A}加工而来。我的理解是不可重复的。

你说的意思是?在什么情况下会重复吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-8 07:17 , Processed in 0.099406 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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