首页 > 解决方案 > 在 SQL Server 中为复合主键定义外键

问题描述

我有两张桌子:TicketTicketRelation。我正在尝试Tickets使用TicketRelation表格关联 2。

我想为两个外键添加级联约束。

班级

我正在使用 SQL Server Management Studio 添加约束,但出现此错误:

在表“ticketRelation”上引入 FOREIGN KEY 约束“FK_destiny_ticket”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

我也尝试使用触发器来执行此操作,但我不确定如何定义它。

在这里,我提供了表格定义:

这是基础实体 TICKET

CREATE TABLE ticket 
(
    ticket_id BIGINT,
    some_data VARCHAR (50),

    CONSTRAINT PK_ticket PRIMARY KEY (ticket_id)
);

和关系表 TICKETRELATION

CREATE TABLE ticketRelation 
(
    origin_ticket BIGINT,
    destiny_ticket BIGINT,
    relation_data VARCHAR (50),

    CONSTRAINT PK_ticket_relation PRIMARY KEY (origin_ticket, destiny_ticket),

    CONSTRAINT FK_origin_ticket FOREIGN KEY (origin_ticket)
        REFERENCES ticket(ticket_id),

    CONSTRAINT FK_destiny_ticket FOREIGN KEY (destiny_ticket)
        REFERENCES ticket(ticket_id),
)

我想为ON DELETE CASCADE两个外键添加一个约束:

    CONSTRAINT FK_origin_ticket FOREIGN KEY (origin_ticket)
         REFERENCES ticket(ticket_id)
              ON DELETE CASCADE, -- I want to add this --

    CONSTRAINT FK_destiny_ticket FOREIGN KEY (origin_ticket)
        REFERENCES ticket(ticket_id)
             ON DELETE CASCADE, -- and this --

标签: sqlsql-servertriggersforeign-keyscomposite-primary-key

解决方案


推荐阅读