微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用更新/删除级联创建两个外键约束

如何解决使用更新/删除级联创建两个外键约束

数据库示例(sql Server):

Table A
   -colA (PK,int)

Table B
   -ColB (FK,int) --> points to Table X

Table C
   -ColAC (PK,FK,int not null) --> points to Table A
   -ColBC (PK,int not null) --> points to Table B

表 C 的主键是 ColAC 和 ColBC。每列都有指向不同表的外键。我需要对表 C 的两个外键都有 ON UPDATE/DELETE CASCADE 约束。因此,当表 A 或 B 发生更改时,它会在表 C 中级联。

表 A 和 B 已在使用中。我可以仅使用其中一个约束创建表 C,但不能同时使用这两个约束,这将返回错误消息。如何创建两个 FK 约束?

sql 示例:

CREATE TABLE Table_C (
    ColAC INT NOT NULL,ColBC INT NOT NULL,PRIMARY KEY (
    ColAC,ColBC
    )
)
GO

ALTER TABLE Table_C WITH CHECK ADD FOREIGN KEY (ColAC)
REFERENCES Table_A (ColA)
ON UPDATE CASCADE
ON DELETE CASCADE
GO

--The second constraint will always fail (does not matter which one is first).
ALTER TABLE Table_C WITH CHECK ADD FOREIGN KEY (ColBC)
REFERENCES Table_B (ColB)
ON UPDATE CASCADE
ON DELETE CASCADE
GO

错误信息:

在表 'Table_C' 上引入 FOREIGN KEY 约束 .... 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。 无法创建约束或索引。查看以前的错误

解决方法

你可以选择两个不同的表,而不是一个表C

  • 表 C1 -ColAC (PK,FK,int not null) --> 指向表 A

  • 表 C2 -ColBC (PK,int not null) --> 指向表 B

现在,您可以在这两个表之间使用 UNION ALL

CREATE VIEW vw_TableC
AS
SELECT ColAC,'TableA' as parent ... FROM TableC1
UNION ALL
SELECT ColBC,'TableB' as parent ... FROM TableC2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。