Office中国论坛/Access中国论坛

标题: 有关于BOM表关系的建立 [打印本页]

作者: doney88    时间: 2015-11-8 15:55
标题: 有关于BOM表关系的建立
本帖最后由 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)。根据你的数据流,跟业务留,你也可以禁止删除该条数据。

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



作者: todaynew    时间: 2015-11-8 16:08
这是复合主键,不一定能找到数据吧?
作者: doney88    时间: 2015-11-8 16:15
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的的记录都会直接删除。
作者: todaynew    时间: 2015-11-8 16:24
doney88 发表于 2015-11-8 16:15
对,以FMainID跟FChildID为复合主键,因为同一层BOM下肯定不会出现同一种关系。这样可以避免数据录入时候 ...

我的意思是说,物料编号到底是对应FmainID的还是对应FChildID的。
作者: doney88    时间: 2015-11-8 16:27
todaynew 发表于 2015-11-8 16:24
我的意思是说,物料编号到底是对应FmainID的还是对应FChildID的。

两个都对应

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

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

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

你要用查询向导试试。看看是否能得到两个不同的物料编号。
作者: doney88    时间: 2015-11-8 16:32
todaynew 发表于 2015-11-8 16:30
你要用查询向导试试。看看是否能得到两个不同的物料编号。

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

作者: doney88    时间: 2015-11-8 16:38
todaynew 发表于 2015-11-8 16:30
你要用查询向导试试。看看是否能得到两个不同的物料编号。

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


明白了,你是按最后一个图做的。这样是可以。
最后一个图中,不需要设置组合主键,将主键设为FBomID比较合理。FMainID与FchildID是可能重复的。即使不允许其重复,也只是将其视为备选主键为好。
作者: doney88    时间: 2015-11-8 16:41
todaynew 发表于 2015-11-8 16:38
明白了,你是按最后一个图做的。这样是可以。
最后一个图中,不需要设置组合主键,将主键设为FBomID比较 ...

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

你说的意思是?在什么情况下会重复吗?
作者: todaynew    时间: 2015-11-8 16:52
本帖最后由 todaynew 于 2015-11-8 16:55 编辑
doney88 发表于 2015-11-8 16:41
比如说我第一层的物料(FMainID - 成品A)肯定是通过下一层的物料{FChildID - 半成品A}加工而来。我的理解 ...


半成品在工序间加以区别,而又不想增加物料表的记录时,会出现重复的问题。
主要是组合主键的约束过强,这需要根据实际情况来确定。如果需要强约束可以这样处理,如果不需要强约束,则不需要这样处理。因为参照完整型与是否设置组合主键是没有直接关系的。

作者: doney88    时间: 2015-11-8 16:56
todaynew 发表于 2015-11-8 16:52
半成品在工序间加以区别,而又不想增加物料表的记录时,会出现重复的问题。

哦,了解了。。

你涉及到了是车间统计这一块吧,我现在还只是在弄采购这一块,所以可能没有研究的像你那么深入。可能以后深入了,也会发现这样的问题。

谢谢提醒。

作者: 风中漫步    时间: 2015-11-9 16:47
哇,好厉害{:soso_e103:}
作者: doney88    时间: 2015-11-9 16:48
风中漫步 发表于 2015-11-9 16:47
哇,好厉害






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