Office中国论坛/Access中国论坛

标题: 请教各位侠士:多字段主键如何建立一对多关系? [打印本页]

作者: lzongb    时间: 2016-9-29 07:26
标题: 请教各位侠士:多字段主键如何建立一对多关系?
本帖最后由 lzongb 于 2016-9-29 11:55 编辑

如题,请指教!

作者: Henry D. Sy    时间: 2016-9-29 09:05
复合主键的两个字段同时同方向(左或右)连接
btw:附件有密码
作者: lzongb    时间: 2016-9-29 11:56
Henry D. Sy 发表于 2016-9-29 09:05
复合主键的两个字段同时同方向(左或右)连接
btw:附件有密码

真是抱歉,附件密码已去掉,请抽时间帮忙看看,谢谢!
作者: Henry D. Sy    时间: 2016-9-29 12:16
为什么要用复合键,
用主键外键不行吗?

作者: lzongb    时间: 2016-9-29 13:17
Henry D. Sy 发表于 2016-9-29 12:16
为什么要用复合键,
用主键外键不行吗?

不是很明白您的意思。就这个例子而言,我想实现的是:一个人名下有多个房屋,各个房屋又有多个装修设备附属物。房屋表(Structure)中用的是复合主键,即OwnerID+HouseSn,不能有重复值。还有别的方式可以实现吗?
作者: lzongb    时间: 2016-9-29 13:27
有些时候房号要调整,所以希望装修设备附属物表中的房号也能够同步自动调整。
作者: Henry D. Sy    时间: 2016-9-29 16:15
lzongb 发表于 2016-9-29 13:17
不是很明白您的意思。就这个例子而言,我想实现的是:一个人名下有多个房屋,各个房屋又有多个装修设备附 ...

[attach]60030[/attach]

这样不行吗,为何要这么复杂

作者: lzongb    时间: 2016-9-29 16:32
Henry D. Sy 发表于 2016-9-29 16:15
这样不行吗,为何要这么复杂

Structure中的房号是有重复的,张三家有1号房,李四家也有1号房,所以不能单把“房号”作为主键;但张三家不可能有2个1号房,所以是把OwnerID和房号一起作为复合主键。
作者: t小宝    时间: 2016-9-29 16:44
在Structure表加个唯一索引的自动编号字段,装修设备附属物 表不需要 OwnerID 和 房号 字段,加个数字类型的字段,和Structure表的自动编号字段关联就可以了
作者: lzongb    时间: 2016-9-29 19:47
t小宝 发表于 2016-9-29 16:44
在Structure表加个唯一索引的自动编号字段,装修设备附属物 表不需要 OwnerID 和 房号 字段,加个数字类型 ...

装修设备附属物表不可以没有OwnerID和房号字段,因为有了这两个字段,才能知道是装设附是哪一家哪一号房的。
我通过其它的方式变相解决了这一问题,我只是好奇复合主键能否与其它表建立一对多的关系并实施参照完整性,看来可能性很小啊。
作者: Henry D. Sy    时间: 2016-9-29 22:26
张三家有1号房,李四家也有1号房
为什么会这样??
作者: roych    时间: 2016-9-30 12:39
1、如果非要那样,为什么不把这两个主键组合成一个唯一值?
2、把“附属物”的字段全部附加到第二个表里。
作者: lzongb    时间: 2016-9-30 21:18
Henry D. Sy 发表于 2016-9-29 22:26
张三家有1号房,李四家也有1号房
为什么会这样??

抱歉,没有表达清楚。我的意思是说,每一家(比如四合院)都有多个房屋,我们需要对房屋进行编号。所以每一家都有自己的1号房,但对于同一家,我不可以把房号编重,即不可以有两个房屋都编成1号。
作者: lzongb    时间: 2016-9-30 21:27
本帖最后由 lzongb 于 2016-9-30 21:29 编辑
roych 发表于 2016-9-30 12:39
1、如果非要那样,为什么不把这两个主键组合成一个唯一值?
2、把“附属物”的字段全部附加到第二个表里。

之所以以OwnerID和房号作为复合主键,就是为了避免把同一个人名下的多个房屋的序号编重。我不知道是否还有别的相对简便的方式可以达到这一点。这两个主键的和是不唯一的,有可能重复,比如:
OwnerID       房号        OwnerID+房号
1                     1                      2
1                     2                      3
2                     1                      3
……
作者: lzongb    时间: 2016-9-30 21:32
我想要达到两个目的:
1、Structure表中,同一人名下的房屋的序号不可以重复。
2、当Structure表中的房号发生变化时,装修设备附属物表中的对应房号可以同步变更。
作者: Henry D. Sy    时间: 2016-9-30 21:50
lzongb 发表于 2016-9-30 21:18
抱歉,没有表达清楚。我的意思是说,每一家(比如四合院)都有多个房屋,我们需要对房屋进行编号。所以每 ...

觉得你把简单的问题复杂化了.
为什么不把业主编号+1号房(你所谓的房号),作为真正的房号呢 ?
作者: lzongb    时间: 2016-10-2 09:22
谢谢大家!暂时抛开我所提供的实例,回归问题的本质,我目前得出的结论是:复合主键表作为“一”方,想与另一个表建立“一对多”的关系并实施参照完整性是有难度的,甚至是不可能的。
作者: Henry D. Sy    时间: 2016-10-2 11:26
lzongb 发表于 2016-10-2 09:22
谢谢大家!暂时抛开我所提供的实例,回归问题的本质,我目前得出的结论是:复合主键表作为“一”方,想与另 ...

其实并不一定,得建立关系.我一般是在做查询时,才建立关系的.
至于要更改房号等关键数据,可以用更新查询.
作者: lzongb    时间: 2016-10-2 18:03
Henry D. Sy 发表于 2016-10-2 11:26
其实并不一定,得建立关系.我一般是在做查询时,才建立关系的.
至于要更改房号等关键数据,可以用更新查询.

我现在也是通过更新查询的方式解决的,但如果能借助数据库自有的功能解决,我还是更倾向于后者。
谢谢诸位了。




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