Есть две таблицы А и В. Таблица В- справочник, имеет первичный ключ с одним полем. Таблица А должна иметь только FK-ключи. Значения полей a1 и a2 не пересекаются (но могут быть NULL). Оба поля должны брать значения из PK таблицы B.
При создании первого foreign key ошибки не возникает.
При создании второго foreign key возникает ошибка: "Introducing FOREIGN KEY constraint 'FK_A_B_2' on table 'A' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints."
То есть говорится о зацикливании, хотя его по сути нет.
Должно быть две связи одной строки таблицы A c таблицей B.
sql server 2008R2
Ошибка возникает при создании foreign key второго поля таблицы A - a2 на PK таблицы B.
CREATE TABLE A
(
a1 int NULL,
a2 int NULL,
a3 int NULL
)
GO
CREATE TABLE B
(
b1 int IDENTITY (1,1) NOT NULL,
b2 int NULL,
PRIMARY KEY(b1)
)
GO
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_A_B]') AND parent_object_id = OBJECT_ID(N'[dbo].[A]'))
ALTER TABLE dbo.A DROP CONSTRAINT FK_A_B
GO
ALTER TABLE dbo.A WITH CHECK ADD CONSTRAINT FK_A_B FOREIGN KEY(a1)
REFERENCES dbo.B (b1) ON DELETE SET NULL
GO
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_A_B_2]') AND parent_object_id = OBJECT_ID(N'[dbo].[A]'))
ALTER TABLE dbo.A DROP CONSTRAINT FK_A_B_2
GO
/*После следующих строк возникает ошибка*/
ALTER TABLE dbo.A WITH CHECK ADD CONSTRAINT FK_A_B_2 FOREIGN KEY(a2)
REFERENCES dbo.B (b1) ON DELETE SET NULL
GO