首页 > 解决方案 > 如何将一个表中的多个外键引用到 ms sql 中的单个主键

问题描述

我试过这个查询,但它不起作用。说我必须使用 ON DELETE NO ACTION,但我需要为已删除的引用设置 null

CREATE TABLE airports
(
    id integer primary key identity(1,1),
    country varchar(50) not null,
    city varchar(50) not null,
    airport_name varchar(50) not null,
    airport_class varchar(50) not null
);

CREATE TABLE flights
(
    id integer primary key identity(1,1),
    code integer unique not null,
    departure_point integer,
    arrival_point integer,
    departure_time datetime not null,
    arrival_time datetime not null,
    foreign key(departure_point) references airports(id) on delete set null,
    foreign key(arrival_point) references airports(id) on delete set null
);

错误(它是俄语,抱歉)

Введение ограничения внешнего ключа (FOREIGN KEY) "FK__flights__arrival__286302EC" для таблицы "flights" может привести к появлению циклов или множественных каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION либо измените другие ограничения внешнего ключа (FOREIGN KEY). 

标签: sqlsql-servertsql

解决方案


这是一个有点长的评论。

我认为这在 SQL Server 中是不可能的。不幸的是,SQL Server 只允许set null每个外部表引用一个。

也就是说,您可能还有其他选择:

  • 我不确定flightsNULL机场合作是否真的有用。您可能想要删除整行。
  • 如果您愿意,您可以将航班信息存储在存档表中,其中包含NULL值或无效的外键引用。
  • 您可以软删除机场。只要有一个机场是否活跃的标志。

推荐阅读