日期:2014-05-18  浏览次数:20608 次

SQL Server中的一个关系的处理问题.
我建立了三个表:
users,主要字段有id
partys,主要字段有id, userid
joins,主要字段有id, partyid, userid

我想建立三个关系:
FK_joins_users,主键users.id, 外键joins.userid, 应用ON DELETE CASCADE ON UPDATE CASCADE
FK_joins_partys,主键partys.id, 外键joins.partyid, 应用ON DELETE CASCADE ON UPDATE CASCADE
FK_partys_users,主键users.id, 外键joins.userid, 应用ON DELETE CASCADE ON UPDATE CASCADE

这三个关系不能同时存在,只能拥有其中的两个,否则就会提示错误.
希望谁能给我一个理想的解决办法,或者告诉我下,应该建立哪两个关系更好些.

提示:表users有可能不会被删除记录,注意是有可能.所以还需要考虑有删除记录的情况.

------解决方案--------------------
没有说清楚,第三个关系好象不错
------解决方案--------------------
可以理解为
users 用户表
partys 活动表 userid是组织者
joins 参与者表

那么关系就很简单了,关系显然应该去掉 FK_partys_users

------解决方案--------------------
SQL code
create table users(id int primary key) 
create table partys(id int primary key,userid int foreign key references users(id) ON DELETE CASCADE ON UPDATE CASCADE ) 
create table joins(id int primary key
    ,partyid int foreign key references partys(id) ON DELETE CASCADE ON UPDATE CASCADE 
    ,userid int foreign key references users(id) --ON DELETE CASCADE ON UPDATE CASCADE
        --应该去掉这个级联更新,否则会出错。将 FOREIGN KEY 约束 'FK__joins__userid__70DE8F2F' 引入表 'joins' 中将导致循环或多重级联路径。
         --请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 约束。
)
go 
drop table joins,partys,users