设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[表] 【求助】如何体现这种事物关系?【难】

[复制链接]
跳转到指定楼层
1#
发表于 2008-12-29 16:16:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这几天一直在想这个问题,简化模型如下:

我有如下3个表

表1-合同表:5字段
有合同号
代理商
代理商销售人
客户
客户联系人

表2-公司表:6字段
公司属性(代理商or用户)
公司名称
公司电话
公司地址
公司联系人
合同号

表3-联系人:5字段
所属公司
姓名
手机
信箱
合同号
(若联系人所属公司属性为“代理商”,那么他就是一位代理商的销售人员,如果所属公司属性为“客户”,那么他就是一位用客联系人)

公司与公司联系人间的关系为一对多。
一个合同要对应一个代理商和一个客户,但双方都会牵涉多名联系人。
请问怎样才能体现这个关系呢?
是否必须要将“公司表”拆成“代理商表”和“客户表”?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
11#
 楼主| 发表于 2009-1-8 16:05:31 | 只看该作者
多谢friendship回复,
你的意思是不是建立一个起中介查询作用的表?
能不能这样:

合同表:
合同ID(主键)
其它合同字段(省略了)

联系人表:
联系人ID(主键)
其它联系人字段(省略了)

联接表:
联接ID(主键)
合同ID
联系人ID

然后这个“合同表”与“联接表”、“联系人表“与“联接表”间都是一对多关系。

这样行吗?
10#
发表于 2009-1-5 00:53:13 | 只看该作者
其实如果你acc是2007版本的话,合同表可以用你的那样的,联系人字段可以多选的。一个组合柜多选,是acc2007的一个新的特性。
9#
发表于 2009-1-5 00:50:28 | 只看该作者
其实你认为难以实现的是一个合同对应供需双方的多个联系人的问题。这个简单,把你的合同表中联系人拆分到一个新的子表,即增加一个合同与联系人的子表,主表是合同表:
有合同ID(主关键字段,唯一),即你的合同号
代理商
客户
其他需要的字段
合同子表:
合同ID(不唯一,可以重复),即你的合同号
公司属性(代理商or用户)
合同联系人
等其他需要的信息字段
其他的表不变。
8#
 楼主| 发表于 2009-1-4 18:38:23 | 只看该作者
这是一个简化的东东:

这里面其实要实现几个个功能(原谅我贪心了):

1)“公司”窗体
只有当标签页1(“公司信息”)中字段“公司属性”为“用户”时,第二个标签页“相关信息”中第二行的控件和按钮才可见或者可用(不可用时为灰色)。

2)“项目”窗体
第二页“相关信息”,比如第一行,一旦已经选定了“制造商”比如说A公司,左键单击后面的“制造商联系人”框,点击右下角的“浏览”按钮,会弹出一多选界面将A公司的所有联系人姓名列出,被选中的联系人组合为一组合框列表置于“制造商联系人”框中,选中任何一个联系人,点击右下角第二个按钮“查找/编辑/新建”将会弹出“联系人”窗体显示相应的联系人信息。
鼠标单击任何一个字段框,再点击“查找/编辑/新建”按钮都会弹出相应的“公司”或“联系人”窗口以显示前面文本框/组合框中选中对象的相关信息。感觉像是窗体-查询-窗体,级联地传递参数。这个感觉很复杂,但是活又急。。。

另外还有一个疑惑,就是在“关系”视图中,其实“公司”表只要在该公司的“公司属性”为“用户”时,才与“项目”表具有一对多关系,如果是“制造商”或“代理商”等其它属性,只在“项目”表中的相应字段中存有其“公司”表主键以备查询,但在“项目”窗体第二页中是通过“公司名称”和“属性”在公司表里查询的,只不过返回公司表主键值。

“联系人”信息也是如此。

所以这里不知道怎样设定联接关系好,是表联接还是查询联接好呢?

本帖子中包含更多资源

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

x
7#
 楼主| 发表于 2009-1-4 17:09:40 | 只看该作者
是这样做的,但现在的问题是,合同表还要联系参与合同项目的“代理商”和“客户”中的联系人(代理商和客户各有若干联系人参与,但不是双方所有的联系人都参与每个合同),所以合同还要与与联系人表中双方的联系人发生联系,问题就在我不知道如何体现这种联系关系。。。直接的表级联系似乎会在关系图中产生封闭的环,这样似乎会有麻烦?
6#
发表于 2008-12-29 19:03:57 | 只看该作者


我大体明白你的意思了。上游的是代理商,下游的是客户对吧?

合同表可以这样建立:合同ID(主键),合同名称,代理商ID,客户公司ID。

如果你做的这个系统比较复杂,比如涉及结算问题,涉及对代理商和客户公司的评价问题等,一般还是将代理商和客户公司做两个表,主要原因是这两个表的某些字段不同。如果只是简单的查询单位和联系人相关信息放在一张表中也就可以了,只是用一个属性字段进行标识而已。

关于想要的效果问题,属于查询设计与窗体设计,查询设计和表的设计有联系但不完全是一码事。表的设计只需要把数据之间关系搞清晰,数据不冗余就可以了。

[ 本帖最后由 todaynew 于 2008-12-29 19:57 编辑 ]
5#
 楼主| 发表于 2008-12-29 18:04:49 | 只看该作者
回楼上:
多谢回复,但我这里的合同不是合同文本之意,你可以把它理解为一个合同项目,每个项目中都有代理商和客户2个参与方,对每个具体合同,参与双方的联系人中会有若干参与到这个项目中,所以希望能实现上述的效果:
“希望最终实现的是新建合同时可以分别从代理商和客户公司列表中选中响应的公司名称(各一个,那个列表也许可以通过查询产生?),之后在代理商或客户联系人列表中选中响应的联系人(可能会有多个)。这样每个合同表中的代理商和用户联系人项中各有一个联系人列表,选中列表中的某个联系人可以方便地到联系人表中查到他的信息。”
4#
发表于 2008-12-29 17:25:19 | 只看该作者
合同表的字段为:合同ID(主键),合同名称,属性ID,单位ID。
合同属性表的字段为:属性ID,属性  (属性=购入,销售,代理)
单位表的字段为:公司ID(主键),属性ID,公司名称,电话,联系人ID
单位属性表字段为:属性ID,属性(供方,需方)
联系人表:公司ID,联系人ID(主键),姓名,手机

在此基础上作查询,比如要查询公司的联系人,可以通过公司表和联系人表建立查询,以属性为“供方”做条件。

你说的一个合同不太可能同时存在供方和需方,你与供方之间你是买入这样需要一个合同,你与需方之间你是卖出这需要另外一个合同。如果你是做中介,供方与需方之间是一个买卖合同,你与供方以及你与需方之间有两个中介合同。看你的意思,可能是几个相关合同需要方在一起管理,这样便于查询数据。那么就可以另外设一个表,可以叫合同组表,其字段为:合同组ID(主键),合同ID,合同表中加合同组ID.

由此关系为:

单位表(1)--合同表(多)
合同组表(1)--合同表(多)
单位表(1)--联系人表(多)

此外:单位表和联系人表可以看成一个字典,完全没必要加入合同号,否则单位表和联系人表记录的唯一性无法保持.

[ 本帖最后由 todaynew 于 2008-12-29 17:59 编辑 ]
3#
 楼主| 发表于 2008-12-29 16:46:08 | 只看该作者
可这样一来这3个表之间的关系连线就形成一个环,我不知道这样可不可以。
希望最终实现的是新建合同时可以分别从代理商和客户公司列表中选中响应的公司名称(各一个,那个列表也许可以通过查询产生?),之后在代理商或客户联系人列表中选中响应的联系人(可能会有多个)。这样每个合同表中的代理商和用户联系人项中各有一个联系人列表,选中列表中的某个联系人可以方便地到联系人表中查到他的信息。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-12 12:24 , Processed in 0.087383 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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