【问题标题】:I need to set as foreign key which refers to one of the composite primary key in other table我需要设置为引用其他表中的复合主键之一的外键
【发布时间】:2013-04-09 14:49:21
【问题描述】:

我有 3 个带有复合主键的表,我需要设置为外键,它引用其他表中的一个主键。

即,

  • 表1:商家(mId,mName,addid,..) pk(mId ,addId) .
  • 表2:地址(addId,name..) pk(addId)
  • 表 3:store(storeId,addId,mId,storename,..) pk(storeId,addId,mId)

表store中的mId是商家表主键mId的外键, tbl 存储中的addId 是表地址中主键的外键。

这种关系是如何在 sql server management studio express 中使用 gui 设置的?

【问题讨论】:

  • store表中的addId,是指商家的addId吗?
  • 是的,store表中的addId是指Address的addId,商家的addId是fk to pk addId of Adreess

标签: sql sql-server sql-server-2008 ssms


【解决方案1】:

您的约束可以像这样工作,即以级联样式:

alter table store add constraint FK_store_merchant foreign key (mId, addId) references merchant (mId,addId)
alter table merchant add constraint FK_merchant_address foreign key (addId) references address (addId)

不确定如何在 GUI 中执行此操作,但只需从查询窗口运行即可。

【讨论】:

  • 但是商店的 addId 是地址中的 addId 而不是商家中的 addId
  • 归根结底,这并不重要。基本上,(mId, addId) 的组合需要有效,而这又依赖于 (addId) 有效。因此,约束正确地强制了关系。您可能需要更改(即删除)一些现有约束。
  • 以下是我的 forkey 要求:CONSTRAINT fk_Merchants_Address1 FOREIGN KEY (addId) REFERENCES dotm.Address (addId) CONSTRAINT fk_Stores_Merchants FOREIGN KEY (@98765)参考dotm.Merchants (mId) ON 删除无操作约束fk_Stores_Address1 外键(addId) 参考dotm.Address (@987654336> 无操作) ON DELETE
  • 您能否发布确切的错误,以及您要运行的内容?在您的帖子中,您说商家的主键为(mId,addId)。如果是这种情况,您不应该收到错误消息。你能确认一下表的主键吗?
猜你喜欢
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2020-01-18
  • 2014-05-05
相关资源
最近更新 更多