三个表会两两关联,怎么办?--急!高分相送

yourhonour3 2009-08-07 09:29:22
数据库中有三个表
第一个表为产品表,主键为Product_ID
第二个表为产品组件表,存储各种产品中的组件信息,有字段Component_ID(主键),Product_ID,其中Product_ID与产品表中Product_ID关联
第三个表为项目活动表,存储当前项目所对应的产品,有字段Project_ID(主键),Product_ID,其中Product_ID与产品表中Product_ID关联
第四个表为项目活动明细表,存储当前项目所对应的产品中的所有组件,有字段Project_Detail_ID(主键),初步设计还有字段Component_ID,而且希望可以与第二个表中的Component_ID关联,以便管理
但问题出现了:预想的这种关联造成了第二、三、四个表之间的相互关联,会造成循环(建立关系时提示的错误),请教高手如何解决该问题?是否要设过渡用的表(我乱想的)?

背景:
导师让就会编个程计算1加到100的我编一个程序,惨!无奈!
应用于产品升级管理软件中,例如,公司有三类产品(表1),各类产品当然由不同的组件组成(表2),而公司打算进行产品升级,请相关人员对产品1设计了3种升级方案,对产品2设计了3种升级方案,对产品3设计了4种升级方案(表3),而各种升级方案中又分别对各种产品中的各组件有具体的升级策略、图纸等(表4),前面三个表关系很明确而且好设计,但是进行表4设计时希望表4中的产品组件应该要与表2中的组件保持一致。

还是我的总体设计方案有问题,请高手指点!
...全文
229 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yourhonour3 2009-08-14
  • 打赏
  • 举报
回复
多谢大家帮忙!
结了。
soft_wsx 2009-08-08
  • 打赏
  • 举报
回复
关系是不是,需要级联删除更新么/用关系图吧!
SQL77 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 yourhonour3 的回复:]
引用 18 楼 sql77 的回复:
SQL codeProject_ID(Key)      Product_ID        Designer11(汽车)          Wang21(汽车)          Zhang

Project_Detail_ID(Key)    Project_ID                  Component_ID          Draft(图纸)11(Wang对汽车的改进方案)1(汽车/发动机)        XX21(Wang对汽车的改进方案)2(汽车/悬挂系统)      XX

楼主这样那个WANG只能对Project_Detail_ID(Key)  =1的更改吧,怎么可能对2也更改了呢?应该是这里错了


嗯?
这里Wang只是随便写的一个人,相当于负责人签字,就是说一个改进方案必须有一个负责人,在数据库中也只是一个普通的字段。
关键是我在建立前三个表的关系之后,再想建立表4和表2之间的关系,即将Component_ID保持一致,但此时提示出错了,说这个时候会出现循环错误。
[/Quote]
你的那个Project_ID(Key)对应的Product_ID 只有1没有2的,你后面对应有2的????等高手
yourhonour3 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 sql77 的回复:]
SQL codeProject_ID(Key) Product_ID Designer11(汽车) Wang21(汽车) Zhang

Project_Detail_ID(Key) Project_ID Component_ID Draft(图纸)11(Wang对汽车的改进方案)1(汽车/发动机) XX21(Wang对汽车的改进方案)2(汽车/悬挂系统) XX

楼主这样那个WANG只能对Project_Detail_ID(Key)  =1的更改吧,怎么可能对2也更改了呢?应该是这里错了
[/Quote]

嗯?
这里Wang只是随便写的一个人,相当于负责人签字,就是说一个改进方案必须有一个负责人,在数据库中也只是一个普通的字段。
关键是我在建立前三个表的关系之后,再想建立表4和表2之间的关系,即将Component_ID保持一致,但此时提示出错了,说这个时候会出现循环错误。
SQL77 2009-08-08
  • 打赏
  • 举报
回复
Project_ID(Key)      Product_ID        Designer 
1 1(汽车) Wang
2 1(汽车) Zhang

Project_Detail_ID(Key) Project_ID Component_ID Draft(图纸)
1 1(Wang对汽车的改进方案) 1(汽车/发动机) XX
2 1(Wang对汽车的改进方案) 2(汽车/悬挂系统) XX


楼主这样那个WANG只能对Project_Detail_ID(Key) =1的更改吧,怎么可能对2也更改了呢?应该是这里错了
claro 2009-08-08
  • 打赏
  • 举报
回复
帮顶
yourhonour3 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 soft_wsx 的回复:]
关系是不是,需要级联删除更新么/用关系图吧!
[/Quote]
对啊,就是在最后建立表4和表2中的Component_ID关系时提示说有错误,还望指教!
yourhonour3 2009-08-07
  • 打赏
  • 举报
回复
**********************************************************************************************
********************* 问 题 补 充 *****************************************************
**********************************************************************************************
我想问的是如何建立数据库,不是如何查找。
可能是背景介绍还不到位,由于自己的项目信息不好外露(XX军工保密项目,小吹一把),举个例子吧:
表1:产品表,存有产品信息
Product_ID(Key) Product_Name others
1 汽车 其它信息
2 电动车 其它信息
表2:产品组件表,存有产品中各组件的信息
Component_ID(Key) Product_ID Component_Name
1 1(汽车) 汽车发动机
2 1(汽车) 汽车悬挂系统
3 2(电动车) 电池
4 2(电动车) 电机
其中Product_ID是表1中Product_ID的外键(主键外键关系,哪个是主键哪个是外键我还不是很明白,
只知道在SQL Server中关系图中把字段拖过来弄成一条线就是了
表3:项目活动表,存有哪些产品有技术变更,而且一个产品可以有不同的技术变更方案
Project_ID(Key) Product_ID Designer
1 1(汽车) Wang
2 1(汽车) Zhang
3 2(电动车) Li
4 2(电动车) Chen
其中Product_ID是表1中Product_ID的外键
表4:注意,就是在设计表4时有问题
项目活动明细表,存有各技术变更方案中对各部件变更的具体信息
Project_Detail_ID(Key) Project_ID Component_ID Draft(图纸)
1 1(Wang对汽车的改进方案) 1(汽车/发动机) XX
2 1(Wang对汽车的改进方案) 2(汽车/悬挂系统) XX
3 2(Zhang对汽车的改进方案) 1(汽车/发动机) XX
4 2(Zhang对汽车的改进方案) 2(汽车/悬挂系统) XX
5 3(Li对电动车的改进方案) 3(电动车/电池) XX
6 3(Li对电动车的改进方案) 4(电动车/电机) XX
7 4(Chen对电动车的改进方案) 3(电动车/电池) XX
8 4(Chen对电动车的改进方案) 4(电动车/电机) XX
好了,现在我希望表4中的Component_ID与表2中的产品组件表中相关的内容是能对应得上的,
但这个时候直接把表4中的Component_ID拖到表2中的4中的Component_ID并建立关系后,
存储时有提示说会有循环XX之类的错误,无法建立关系。

请问各位大侠,是不是数据库根本就不该这么建,咋办?

谢谢!!
--小F-- 2009-08-07
  • 打赏
  • 举报
回复
进来看看
fwacky 2009-08-07
  • 打赏
  • 举报
回复
无数据,无实现!
yourhonour3 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guguda2008 的回复:]
第四个表为项目活动明细表,存储当前项目所对应的产品中的所有组件
这句不明白,第三个表已经有当前项目对应的产品了,直接通过连接得到所有组件就是了,为什么要放到另一个表里?
能不能多讲讲第四个表的功能
[/Quote]

第四个表还要存储具体的产品各部件的详细升级信息,例如第三个表保存第一类产品的的第一种升级方案,这个方案是XXX研究员在XX年XX月XX日提出的,而第四个表则需要说明该方案中对于组件1进行了如何改进,对组件2进行了如何改进。
SQL77 2009-08-07
  • 打赏
  • 举报
回复
弄点数据来,看得清楚
soft_wsx 2009-08-07
  • 打赏
  • 举报
回复
如果用这种方法就可以解决,那楼主对表结构怕是不了解吧!
soft_wsx 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 herowang 的回复:]
SQL codeselect*from ajoin bon a.product_id=b.product_idjoin con b.product_id=c.product_idjoin don b.Component_ID=d.Component_ID
[/Quote]不可能有这么简单,
楼主的需求不太明确,没看懂,
最好给出原数据和想要的结果
ChinaJiaBing 2009-08-07
  • 打赏
  • 举报
回复

最好贴数据与结果...
lz可以 查查join的用法
黄_瓜 2009-08-07
  • 打赏
  • 举报
回复
--------------------------------- 
-- Author: Beirut(贝鲁特)
-- Comment:小爱
-- Date : 2009-08-04 18:49:08
---------------------------------
--一个三表连接的例子,你看看
create table Tag (id int ,name varchar(20), parent int)
insert into tag values(1, 'SQL', 0)
insert into tag values(2, 'MS', 1)
insert into tag values(3, 'oracle', 1)

create table Article (id int ,title varchar(20))

insert into Article values (1, 'SQL how to')
insert into Article values (2, 'reference')

create table Tag_Article (tag_id int, article_id int)
insert into Tag_Article values(2, 1)
insert into Tag_Article values(3, 2)
--id title tag_id tag_name
select a.id ,b.title,c.tag_id,c.article_id
from tag as a
inner join Article b on a.id=b.id
inner join Tag_Article c on b.id=c. article_id
/*id title tag_id article_id
----------- -------------------- ----------- -----------
1 SQL how to 2 1
2 reference 3 2

(2 行受影响)
*/
feixianxxx 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 herowang 的回复:]
SQL codeselect*from ajoin bon a.product_id=b.product_idjoin con b.product_id=c.product_idjoin don b.Component_ID=d.Component_ID
[/Quote]
直接做链接操作,
楼主你的链接操作还会死循环?
不会的吧
guguda2008 2009-08-07
  • 打赏
  • 举报
回复
第四个表为项目活动明细表,存储当前项目所对应的产品中的所有组件
这句不明白,第三个表已经有当前项目对应的产品了,直接通过连接得到所有组件就是了,为什么要放到另一个表里?
能不能多讲讲第四个表的功能
  • 打赏
  • 举报
回复
不会造成死循环的,只是几个表的连接条件而已
  • 打赏
  • 举报
回复
select * 
from a join b on a.product_id=b.product_id
join c on b.product_id=c.product_id
join d on b.Component_ID=d.Component_ID
加载更多回复(1)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧